Управление кнопками Bluetooth-гарнитуры Android
Эта тема иногда всплывает, но я не могу заставить эту вещь работать. Мое приложение раньше обрабатывало мультимедийные кнопки, но API после Android 5.0 изменился, и его нужно адаптировать, чтобы он "ловил" кнопки Bluetooth и обрабатывал их "по-своему".
Я сделал много поисков и обнаружил, что:
final MediaSession session = new MediaSession(this, "spy tag");
session.setCallback(new MediaSession.Callback() {
@Override
public boolean onMediaButtonEvent(final Intent mediaButtonIntent) {
Toast.makeText(me, "on media button event", Toast.LENGTH_SHORT);
Log.i("TAG", "GOT EVENT");
return super.onMediaButtonEvent(mediaButtonIntent);
}
});
session.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS |
MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);
PlaybackState state = new PlaybackState.Builder()
.setActions(
PlaybackState.ACTION_PLAY | PlaybackState.ACTION_PLAY_PAUSE |
PlaybackState.ACTION_PLAY_FROM_MEDIA_ID | PlaybackState.ACTION_PAUSE |
PlaybackState.ACTION_SKIP_TO_NEXT | PlaybackState.ACTION_SKIP_TO_PREVIOUS)
.setState(PlaybackState.STATE_PLAYING, 0, 1)
.build();
session.setPlaybackState(state);
session.setActive(true);
но... это все еще не работает. всякий раз, когда я нажимаю любую кнопку мультимедиа, я получаю это в Logcat:
2019-06-16 19: 40: 14.458 2936-4422 /? D / MediaSessionService: Отправка KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_MEDIA_NEXT, scanCode=0, metaState=0, флаги =0x0, repeatCount=0, eventTime=0, downTime=0, deviceId=-1, source=0x0 } в последний известный PendingIntent PendingIntent{afe4538: PendingIntentRecord{13648e com.google.android.youtube broadcastIntent}} 2019-06-16 19:40:14.460 3230-3230/? V/Avrcp: recordKeyDispatched: KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_MEDIA_NEXT, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=0, downTime=0, deviceId=-1, source=0x0 } отправлено на com.google.android.youtube 2019-06-16 19:40:14.466 2936-4422/? D/MediaSessionService: Отправка KeyEvent { action=ACTION_UP, keyCode=KEYCODE_MEDIA_NEXT, scanCode=0, metaState=0, флаги =0x0, repeatCount=0, eventTime=0, downTime=0, deviceId=-1, source=0x0 } в последний известный PendingIntent PendingIntent{afe4538: PendingIntentRecord{13648e com.google.android.youtube broadcastIntent}} 2019-06-16 19:40:14.475 3230-3230/? V/Avrcp: recordKeyDispatched: KeyEvent { action=ACTION_UP, keyCode=KEYCODE_MEDIA_NEXT, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=0, downTime=0, deviceId=-1, source=0x0 } отправлено на com.google.android.youtube
и мое приложение не получает никаких обратных вызовов. что мне не хватает?