широковещательный приемник для ACTION_CAMERA_BUTTON никогда не вызывается - PullRequest
3 голосов
/ 24 августа 2011

У меня есть приложение на 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); 

!Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 24 августа 2011

Вы должны либо зарегистрировать получателя в манифесте, либо зарегистрироваться программно. Удалите вызов registerReceiver() из метода onResume.

Edit:
Добавьте их в свой манифест.

 <uses-permission android:name="android.permission.CAMERA" />
 <uses-feature android:name="android.hardware.camera" />
0 голосов
/ 03 мая 2012

Для открытия только камеры вашего приложения вы можете использовать намерение, например:

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, ACTION_IMAGE_CAPTURE);
0 голосов
/ 09 февраля 2012

Ваш фильтр намерений никогда не должен иметь приоритет 10000. Максимально допустимый для пользовательских приложений - 999.

См. setPriority (int) на веб-сайте AndroidDev.

...