我正在尝试在我的应用程序处于活动状态时“阻止”相机操作。 onReceive 方法正在BroadcastReceiver上执行,但是LogCat似乎在Intent已经执行之后就这样做了。
的manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:screenOrientation="landscape" android:debuggable="true"
android:clearTaskOnLaunch="true">
<receiver android:name="com.receiver.CameraReceiver">
<intent-filter>
<action android:name="android.intent.action.CAMERA_BUTTON" />
</intent-filter>
</receiver>
<activity android:name=".Main" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.media.action.IMAGE_CAPTURE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
com.receiver.CameraReceiver
package com.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class CameraReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(this.toString(), "Suck It Android!");
abortBroadcast();
}
@Override
public String toString() {
return "com.receiver.CameraReceiver";
}
}
logcat的
12-03 14:47:41.171: INFO/ActivityManager(981): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x14000000 cmp=com.google.android.camera/com.android.camera.Camera }
12-03 14:47:41.288: INFO/WindowManager(981): Setting rotation to 1, animFlags=1
12-03 14:47:41.304: INFO/ActivityManager(981): Config changed: { scale=1.0 imsi=310/4 loc=en_US touch=3 keys=2/1/2 nav=2/2 orien=2 layout=34 uiMode=17 seq=30}
12-03 14:47:41.811: DEBUG/dalvikvm(981): GC_EXTERNAL_ALLOC freed 8025 objects / 388808 bytes in 208ms
12-03 14:47:41.999: DEBUG/AlarmManagerService(981): Kernel timezone updated to 300 minutes west of GMT
12-03 14:47:42.288: INFO/[com.specialed.receiver.CameraReceiver](13152): Suck It Android!
答案 0 :(得分:2)
实际上我可以通过添加
来实现<category android:name="android.intent.category.DEFAULT" />
到我的意图,所以它看起来像:
<receiver android:name="com.receiver.CameraReceiver">
<intent-filter>
<action android:name="android.intent.action.CAMERA_BUTTON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
这似乎有效,任何人都可以评论这个或android:priority
是否正确。
另外,如果我可以停止按下按钮时发生的'振动',这将有所帮助。
谢谢!
答案 1 :(得分:0)
我不确切地知道我是否完全错了,但我的理解是,BroadcastReceiver不会停止另一项活动,而是平行执行。
编辑:我在google android开发组中发现了一个可能对您有帮助的帖子: click
精华: 将Receiver的高优先级设置为较高的值,以便Android在您按下相机按钮时选择先启动应用。
<intent-filter android:priority=*"10000"*>
onReceive()
的第一行:abortBroadcast();