Как обнаружить нажатие кнопки вызова / мультимедиа через Bluetooth в приложении для Android

Мне нужно обнаружить нажатие кнопки устройства Bluetooth в моем приложении. я перешел по многим ссылкам на stackoverflow, но, похоже, у меня это не работает.

Я использую широковещательный приемник, как показано ниже:

public class RemoteControlReceiver extends BroadcastReceiver {    
    @Override    
    public void onReceive(Context context, Intent intent) {    
        if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {    
            KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);    
            if (KeyEvent.KEYCODE_MEDIA_PLAY == event.getKeyCode()) {    
                //call my method    
            }    
        }    
    }    
}

и мой манифест выглядит следующим образом:

<receiver android:name=".RemoteControlReceiver" >    
   <intent-filter>    
       <action android:name="android.intent.action.MEDIA_BUTTON" />    
       <category android:name="android.intent.category.DEFAULT"/>    
   </intent-filter>    
</receiver>

может кто подскажет выход? Заранее спасибо.


person user851296    schedule 06.07.2013    source источник
comment
эй, я тоже искал решение в течение нескольких дней, и эта ссылка сработала для меня, посмотрите, не решили ли вы ее stackoverflow.com/questions/6287116/   -  person moltencrap    schedule 30.09.2013


Ответы (1)


Ваш уровень API не ниже 11? Код KEYCODE_MEDIA_PLAY был добавлен на уровне API 11. Код KEYCODE_MEDIA_PLAY_PAUSE существует, начиная с уровня API 3.

Кроме того, вы пытались настроить фильтр намерений без указания категории?

Ваш класс RemoteControlReceiver находится в корневом пакете вашего приложения? Возможно, он не смог найти «.RemoteControlReceiver».

Кроме этого, я не вижу, где вы могли бы сделать что-то не так.

Я читал в нескольких сообщениях, что вам, возможно, придется также вызывать registerMediaButtonEventReceiver и unregisterMediaButtonEventReceiver. Вы пробовали это?

Зарегистрироваться:

audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
componentName = new ComponentName(getPackageName(),
    RemoteControlReceiver.class.getName());
audioManager.registerMediaButtonEventReceiver(componentName);

И отменить регистрацию:

audioManager.unregisterMediaButtonEventReceiver(componentName);
person Alex Machado    schedule 11.10.2013