Управление мультимедиа 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 и очередью с вашими песнями. В этом случае кнопки будут появляться при износе, проверял на часах.