Управление кнопками Bluetooth-гарнитуры Android - PullRequest
0 голосов
/ 16 июня 2019

Эта тема иногда всплывает, но я не могу заставить эту вещь работать. Мое приложение раньше обрабатывало мультимедийные кнопки, но 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

и мое приложение не получает никаких обратных вызовов. что мне не хватает?

...