安卓:广播接收器意图检测相机拍照?

8
我正在开发一款Android应用程序,需要在手机拍摄新照片时执行某个操作。我不想在我的应用程序中拍摄图片,而是希望在相机应用程序拍摄并将图像保存到SD卡时执行某些操作。目前,我已经实现了一个广播接收器来监听"android.intent.action.CAMERA_BUTTON",但是它似乎没有在我想要的时候被调用。我尝试使用我的手机在BroadcastReceiver的OnReceive方法的第一行设置断点进行调试,但它从未达到该代码。
有人知道我应该监听哪个正确的意图吗?或者使用BroadcastReceiver甚至不是做这件事情最好的方式吗?(例如,是否有更好的方法来完成此操作,如监听何时将新图像保存到卡中)?
谢谢!
更新:我的手机(HTC Eris)上有一个轨迹球,因此拍照的方式可能不会作为“相机按钮”发送。如果是这样,对于没有“相机按钮”,而是像轨迹球这样的东西的手机,是否有解决方法?
3个回答

7

目前,我已经实现了一个BroadcastReceiver,它正在监听"android.intent.action.CAMERA_BUTTON"。然而,当我想要它被调用时,它似乎并没有被调用。

只有在前台活动未消耗该事件时,才会广播该事件。


2
@JToland:没有广播说“相机拍照了”。 - CommonsWare
9
您可以在MediaStore上设置ContentObserver。您可以在SD卡中的某个位置上设置FileObserver。但这两种方法都不严格等同于“新照片已保存”。 - CommonsWare
2
@Krishnabhadra:不,除了让您的活动接管前台之外,没有其他方法。 - CommonsWare
1
@CommonsWare 应用程序在相机应用程序运行时如何“接管前台”?如果您需要跟踪相机使用情况,监视MediaStore是否是唯一可行的选项?对于拍摄视频,这也是一样的吗?谢谢。 - gonzobrains
1
@gonzobrains:“我的目标只是确定照片拍摄的时间”--有成千上万的应用程序可以拍照。它们都可以对照片进行不同的操作,而您无法知道它们何时拍照或对其进行了什么操作。 - CommonsWare
显示剩余10条评论

4

这是一个比较老的问题,如果还有人需要解决,请尝试使用

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""! - Denny Weinberg
已弃用且在API级别24中不起作用:https://developer.android.com/topic/performance/background-optimization.html - Vistritium

0

试试这个,这个对我有效

<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接