【发布时间】:2011-08-24 13:39:52
【问题描述】:
我在 android 中有一个应用程序,我想在按下相机的物理硬件按钮时拍照。我为这种类型的操作注册了一个意图,但我的广播接收器从未被调用。
我是这样做的:
扩展BroadcastReceiver的类
public class Adisor extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT) != null) {
// prevent the camera app from opening
abortBroadcast();
System.out.println("HEY");
mCamera.takePicture(null, mPictureCallback, mPictureCallback);
}
}
}
这里是我注册接收器以监听操作的地方:
protected void onResume() {
Log.e(TAG, "onResume");
super.onResume();
drb = new Adisor();
IntentFilter i = new IntentFilter(
"android.intent.action.CAMERA_BUTTON"
);
registerReceiver(drb, i);
}
在我的清单文件中,我有这个:
<activity android:name=".TakePhoto" />
<receiver android:name=".Adisor" >
<intent-filter android:priority="10000">
<action android:name="android.intent.action.CAMERA_BUTTON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
我正在做这一切的活动的名称是:TakePhoto。我的问题是为什么我的 onReceive() 方法永远不会被调用!
这都不是:
System.out.println("HEY");
出现在我的logcat或方法中
System.out.println("HEY");
mCamera.takePicture(null, mPictureCallbacmPictureCallback);
被调用! 我做错了什么?
【问题讨论】:
-
你有没有看到它是否在 if() 之外进入广播接收器
-
我尝试了 System.out.println() 并且没有显示任何内容.....我在外部尝试了 if()...可能出了什么问题?
标签: android broadcastreceiver intentfilter