Управление мультимедиа Android Wear не показывает кнопки "предыдущий / следующий"

Разрабатываю медиаплеер. К сожалению, я не могу использовать MediaBrowserService для лучшей поддержки устройств, подключенных через Bluetooth. Но, по крайней мере, я реализовал класс MediaSession для широковещательной передачи информации о воспроизведении с использованием протокола AVRCP.

Когда я начинаю воспроизведение, мои часы Wear автоматически показывают уведомление, но только с кнопкой "Воспроизвести / Пауза". Если я использую кнопки "Назад" / "Далее" в наушниках или в машине, они работают отлично. Но у меня нет этих кнопок в уведомлении на Android Wear.

Можно ли заставить часы отображать эти кнопки? Если я запустил какой-нибудь другой плеер, у меня на часах будут эти кнопки. Но не с моим собственным плеером.

Вот мой код:

mMediaSession = new MediaSessionCompat(this, "MuzikaServiceMediaSession");
        mMediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
        mMediaSession.setActive(true);
        mMediaSession.setCallback(myMediaSessionCallback);
        PlaybackStateCompat state = new PlaybackStateCompat.Builder()
                .setActions(PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE |
                        PlaybackStateCompat.ACTION_SKIP_TO_NEXT | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS |
                        PlaybackStateCompat.ACTION_FAST_FORWARD | PlaybackStateCompat.ACTION_REWIND
                )
                .setState(PlaybackStateCompat.STATE_STOPPED, 0, 1f)
                .build();
        mMediaSession.setPlaybackState(state);

Спасибо.

1 ответ

У меня была аналогичная проблема. Причина заключалась в использовании MediaSessionConnector exoplayer, который переопределяет функции медиа-кнопок. По умолчанию MediaSessionConnector переопределяет только кнопку PLAY/PAUSE, и когда вы пытаетесь использовать PlaybackStateCompat.Builder(), он не работает, потому что MediaSessionConnector переопределяет это задание. MediaSessionConnector не включает ACTION_SKIP_TO_PREVIOUS и ACTION_SKIP_TO_NEXT, потому что для этого вам необходимо реализовать TimelineQueueNavigator (он обрабатывает действия ACTION_SKIP_PREVIOUS, ACTION_SKIP_NEXT и ACTION_SKIP_TO_QUEUE_ITEMession) как часть MediaConnector. Подробности смотрите на странице Medium

Чтобы исправить это, я полностью удалил MediaSessionConnector из своего кода и добавил следующий код при инициализации:

PlaybackStateCompat.Builder stateBuilder;
stateBuilder = new PlaybackStateCompat.Builder();
stateBuilder.setActions(PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS | PlaybackStateCompat.ACTION_PLAY_PAUSE|PlaybackStateCompat.ACTION_SKIP_TO_NEXT);

и эту часть к методу обновления метаданных песни и уведомления:

   int state;
        if (isPlaying) {
            state = 3;
        } else {
            state = 2;
        }
        stateBuilder.setState(state, 0, 1.0f);
        mediaSession.setPlaybackState(stateBuilder.build());

Также есть другое решение для создания MediaSessionConnector с правильным TimelineQueueNavigator и очередью с вашими песнями. В этом случае кнопки будут появляться при износе, проверял на часах.

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