【发布时间】:2011-06-02 01:40:59
【问题描述】:
我正在尝试制作一个可以检测用户何时拍照的应用。我设置了一个广播接收器类并通过以下方式将其注册到清单文件中:
<receiver android:name="photoReceiver" >
<intent-filter>
<action android:name="com.android.camera.NEW_PICTURE"/>
<data android:mimeType="image/*"/>
</intent-filter>
</receiver>
无论我尝试做什么,程序都不会收到广播。这是我的接收器类:
public class photoReceiver extends BroadcastReceiver {
private static final String TAG = "photoReceiver";
@Override
public void onReceive(Context context, Intent intent) {
CharSequence text = "caught it";
int duration = Toast.LENGTH_LONG;
Log.d(TAG, "Received new photo");
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}
如果我在清单和活动中删除 mimeType 行,我会使用发送自己的广播
Intent intent = new Intent("com.android.camera.NEW_PICTURE");
sendBroadcast(intent);
然后我成功接收到广播并且可以看到日志和 toast 窗口。我以正确的方式接近这个吗?有什么需要补充的吗?
【问题讨论】:
-
你从哪里得到
com.android.camera.NEW_PICTURE?快速浏览 sdk 后,我可以判断,该操作不存在。 -
@sugarynugs 我在其他一些线程上找到了它。这是其中之一,显然它来自相机的来源。 stackoverflow.com/questions/3015448/…,拍照时调用 sendBroadcast(new Intent("com.android.camera.NEW_PICTURE", mLastContentUri));
-
你在哪个版本的 android 上测试这个?
-
@sugarynugs 我正在使用 Froyo(2.2) 在我的 HTC Evo 上对其进行测试。我还在 2.2 的模拟器上测试了它,但没有运气。我一直在尝试很多不同的事情,比如以编程方式注册接收器,但仍然没有运气。您是否知道我可以通过其他方式跟踪在背景中拍摄照片的时间?我希望我的应用程序留在后台并监听事件。我唯一能想到的另一件事是设置一个媒体存储接收器并监听从相机保存的图像,但这会更麻烦!感谢您迄今为止的帮助!
-
@sugarynugs 另外,我想知道 HTC 的 Sense 是否可以以某种方式改变相机的广播方式,但即使是这种情况,它也应该在模拟器上工作。只是一个想法。
标签: android android-manifest android-camera android-camera-intent