Android - MediaSession не фиксирует ключевые события, но их можно увидеть в logcat

Вот код для захвата любых ключевых событий мультимедиа


final MediaSession session = new MediaSession(getApplicationContext(), "TAG");
        session.setCallback(new MediaSession.Callback() {
            @Override
            public boolean onMediaButtonEvent(final Intent mediaButtonIntent) {
                Toast.makeText(getApplication(), "key events captured", Toast.LENGTH_LONG).show();
                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_STOPPED, PlaybackState.PLAYBACK_POSITION_UNKNOWN, 0)
                .build();
        session.setPlaybackState(state);


        session.setActive(true);

Я использовал это в недавно созданном проекте Android, и все работало хорошо (я мог захватывать ключевые события с переднего плана и фона), однако я использовал этот код в другом проекте и не смог захватить какие-либо ключевые события, возможно, есть что-то переопределить это или другое дело фиксировать ключевые события, как это решить? Я пытался удалить функции (onKeyDown и onKeyUp), но все равно не работал

Примечание: я вижу это в logcat, когда нажимаю кнопку:

07-25 22:08:08.604 688-4294/system_process D/MediaSessionService: dispatchMediaKeyEvent, pid=9965, uid=10070, event=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_MEDIA_PLAY_PAUSE, scanCode=164, metaState=0, flags=0x8, repeatCount=0, eventTime=2967810, downTime=2967810, deviceId=8, source=0x101 }
07-25 22:08:08.605 688-4294/system_process D/MediaSessionService: Sending media key to com.example.mediabuttons/TAG
07-25 22:08:08.605 9965-9965/com.example.mediabuttons D/MediaSessionHelper: dispatched media key KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_MEDIA_PLAY_PAUSE, scanCode=164, metaState=0, flags=0x8, repeatCount=0, eventTime=2967810, downTime=2967810, deviceId=8, source=0x101 }

1 ответ

Решение

Я нашел проблему,

Мне просто нужно объявить объект MediaSession как общедоступный статический, я новичок в android и не знаю, почему это решило проблему.

Другие вопросы по тегам