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的简单使用