метод onReceive () BroadcastReceiver никогда не вызывается - PullRequest
1 голос
/ 25 августа 2011

У меня есть приложение, в котором я пытаюсь зарегистрировать 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`.

Ответы [ 3 ]

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

Попробуйте вот так.

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);
                           }
                       }
};
1 голос
/ 25 августа 2011

Вы должны изменить следующие изменения в своем манифесте

<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

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

Вы нажимаете аппаратную кнопку камеры или программную кнопку?Он вызывается только когда нажата аппаратная кнопка камеры, а не с кнопкой в ​​приложении камеры.

РЕДАКТИРОВАТЬ
Кроме того, только что нашел это: android.intent.action.CAMERA_BUTTON не вещает на Desire Z (Froyo)?

От производителя устройства не требуется отправлять какую-либо трансляцию при нажатии кнопки CAMERA, из моего прочтения определения совместимостиДокумент.Он может использоваться только на переднем плане на Desire Z. У меня нет Z, и поэтому я не могу подтвердить ваши тесты.

Поскольку в подавляющем большинстве устройств Android вообще нет кнопки CAMERA,вам нужно убедиться, что ваше приложение работает хорошо без такой кнопки, и что вы советуете пользователям, что кнопка CAMERA может работать или не работать с вашим приложением в зависимости от устройства.

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