我有一个应用,其中我正在尝试注册一个监听此类意图的BroadcastReceiver
:android.intent.action.CAMERA_BUTTON
但问题是我的onReceive()方法永远不会被调用!
这就是我的做法:
在onCreate()
中的我也尝试在onResume()
中注册,但结果相同:
drb=new Adisor();
IntentFilter intent=new IntentFilter("android.intent.action.CAMERA_BUTTON");
registerReceiver(drb,intent);
和我的班级Adisor
:
public class Adisor extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("Bau");
if (intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT) != null) {
// prevent the camera app from opening
abortBroadcast();
System.out.println("HEY");
// mCamera.takePicture(null, mPictureCallback, mPictureCallback);
}
}
}
我在manifest file
中拥有以下权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera" />
但是当我按下相机按钮时,logcat中没有显示任何消息!有什么想法吗?
编辑:我也尝试在清单文件中注册我的意图
<activity android:name=".TakePhoto"
>
<receiver android:name="com.Contest.Adisor"
android:enabled="true" android:exported="true">
<intent-filter android:priority="10000">
<action android:name="android.intent.action.CAMERA_BUTTON" />
</intent-filter>
</receiver>
Adisor is an inner class of `TakePhoto`.
答案 0 :(得分:1)
您是按下硬件相机按钮还是软件按钮?只有在按下硬件摄像头按钮时才会调用它,而不是使用摄像头应用程序中的按钮。
修改强>
另外,刚刚发现了这个:
android.intent.action.CAMERA_BUTTON not broadcasting on Desire Z (Froyo)?
设备制造商无需发送任何内容 单击CAMERA按钮时广播,从我的阅读中读取 兼容性定义文档。它可能只被用于 Desire Z上的前景活动。我没有Z,所以不能 确认你的测试。
由于绝大多数Android设备都没有CAMERA按钮 根本不需要,你需要确保你的应用程序运行良好 一个按钮,您建议用户可以使用CAMERA按钮 根据设备不适用于您的应用。
答案 1 :(得分:1)
试试这样。
IntentFilter intentFilter =
new IntentFilter(Intent.ACTION_CAMERA_BUTTON);
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
registerReceiver(drb, intentFilter);
替换以下代码部分。
public class Adisor extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("Bau");
if (intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT) != null) {
// prevent the camera app from opening
abortBroadcast();
System.out.println("HEY");
// mCamera.takePicture(null, mPictureCallback, mPictureCallback);
}
}
}
有了这个。
private final BroadcastReceiver drb = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("Bau");
if (intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT) != null) {
// prevent the camera app from opening
abortBroadcast();
System.out.println("HEY");
// mCamera.takePicture(null, mPictureCallback, mPictureCallback);
}
}
};
答案 2 :(得分:1)
您必须更改清单中的以下更改
<activity android:name=".TakePhoto">
<receiver android:name="com.Contest.TakePhoto$Adisor"
android:enabled="true" android:exported="true">
<intent-filter android:priority="10000">
<action android:name="android.intent.action.CAMERA_BUTTON" />
</intent-filter>
</receiver>
因为您在活动TakePhoto中声明了广播接收器