Android BroadcastReceiver无法停止Camera Intent操作

时间:2010-12-03 20:04:25

标签: android

我正在尝试在我的应用程序处于活动状态时“阻止”相机操作。 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!

2 个答案:

答案 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();