Android BroadcastReceiver не останавливает действие камеры. - PullRequest
0 голосов
/ 03 декабря 2010

Я пытаюсь «заблокировать» действие камеры, когда мое приложение активно. Метод onReceive выполняется на BroadcastReceiver, но LogCat, похоже, делает это после того, как намерение уже выполнено.

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 ]

2 голосов
/ 03 декабря 2010

На самом деле я смог сделать это, добавив

<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 правильный путь.

Кроме того, если я смогу остановить «Вибрацию», которая происходит при нажатии кнопки, это будет полезно.

Спасибо!

0 голосов
/ 03 декабря 2010

Я точно не знаю, полностью ли я ошибаюсь, но, насколько я понимаю, BroadcastReceiver не остановит другое действие, а выполняется параллельно.

Изменить: Я нашел тему в группе разработчиков Google Android, которая может помочь вам: нажмите

Суть: Установите высокий приоритет вашего Receiver на высокое значение, поэтому Android выбирает ваше приложение для запуска первым при нажатии кнопки камеры.

<intent-filter android:priority=*"10000"*>

И первая строка вашего onReceive(): abortBroadcast();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...