Android:BroadcastReceiver 意图检测拍摄的相机照片?

Posted

技术标签:

【中文标题】Android:BroadcastReceiver 意图检测拍摄的相机照片?【英文标题】:Android: BroadcastReceiver intent to Detect Camera Photo Taken? 【发布时间】:2011-05-22 07:48:06 【问题描述】:

我正在开发一个 android 应用程序,该应用程序需要在每次使用手机拍摄新图像时执行一项操作。我不想在我的应用程序中拍摄图像,而是在相机应用程序拍摄图像并将其保存到 SD 卡时执行一些操作。现在,我已经实现了一个正在监听“android.intent.action.CAMERA_BUTTON”的广播接收器。但是,当我想要它时,这似乎并没有被调用。我尝试在自己的手机上调试应用程序,并在 BroadcastReceiver 的 OnReceive 方法的第一行使用换行符,但它从未到达该代码。

有谁知道我应该听的正确意图是什么?或者使用 BroadcastReceiver 甚至不是最好的方法? (例如,是否有更好的方法来完成此操作,例如监听新图像何时保存到卡中)?

谢谢!

更新:我的手机(HTC Eris)上确实有一个轨迹球,那么以这种方式拍摄的照片是否有可能不会作为“相机按钮”发送?如果是这样,对于没有“相机按钮”而是类似轨迹球的手机是否有解决方法?

【问题讨论】:

【参考方案1】:

现在,我已经实现了一个正在监听“android.intent.action.CAMERA_BUTTON”的 BroadcastReceiver。但是,当我想要它时,它似乎没有被调用。

只有在前台活动不消费事件时才会广播。

【讨论】:

@JToland:没有广播说“相机拍照了”。 @JToland:您可以在MediaStore 上设置ContentObserver。您可以在 SD 卡的某个位置设置FileObserver。严格来说也不是“已保存新照片”。 @Krishnabhadra:不,除了让你的活动占据前台。 @CommonsWare 在相机应用程序运行时,一个人的应用程序如何“占据前台”?如果您需要跟踪相机使用情况,监控 MediaStore 是唯一可行的选择吗?拍摄视频也一样吗?谢谢。 @gonzobrains:“我的目标只是确定何时拍摄照片”——有成千上万的应用程序可以拍照。他们都可以用它们做不同的事情,你无法知道他们什么时候拍照或用它们做什么。【参考方案2】:

一个老问题,如果有人仍然需要解决方案,请尝试使用

android.hardware.action.NEW_PICTURE

作为你的意图过滤器

<!-- Receiver for camera clicks -->
    <receiver
        android:name=".receivers.CameraEventReceiver"
        android:label="CameraEventReceiver">
        <intent-filter>

            <!-- <action android:name="com.android.camera.NEW_PICTURE" /> -->
            <action android:name="android.hardware.action.NEW_PICTURE" />

            <data android:mimeType="image/*" />
        </intent-filter>
    </receiver>

它会在onReceive()函数的intent.getData()中返回图片的Uri

希望对你有帮助

【讨论】:

注意“android:enabled="false"”! 已弃用且在 api 级别 24 中不起作用:developer.android.com/topic/performance/…【参考方案3】:

试试这个对我有用的

<receiver android:name=".pictureReceiver" >
        <intent-filter android:priority="10000" >
            <action android:name="android.intent.action.CAMERA_BUTTON" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
</receiver>

【讨论】:

以上是关于Android:BroadcastReceiver 意图检测拍摄的相机照片?的主要内容,如果未能解决你的问题,请参考以下文章

Android_组件_BroadcastReceiver基础

Android BroadcastReceiver广播:基本使用

Android -- BroadCastReceiver的简单使用

Android BroadcastReceiver

android从broadcastreceiver刷新listview

Android开发实践 BroadcastReceiver