我正在开发媒体播放器。不幸的是,我无法使用MediaBrowserService更好地支持通过蓝牙连接的设备。但是至少我实现了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);
谢谢。
我有类似的问题。原因是使用exoplayer的MediaSessionConnector重写了媒体按钮功能。默认情况下,MediaSessionConnector仅覆盖PLAY / PAUSE按钮,并且当您尝试使用PlaybackStateCompat.Builder()时,它将不起作用,因为MediaSessionConnector覆盖了此作业。 MediaSessionConnector不包含ACTION_SKIP_TO_PREVIOUS和ACTION_SKIP_TO_NEXT,因为为此,您需要实现TimelineQueueNavigator(它作为MediaSessionConnector的一部分来处理ACTION_SKIP_PREVIOUS,ACTION_SKIP_NEXT和ACTION_SKIP_TO_QUEUE_ITEM)。参见details at the Medium page
为了修复它,我从代码中完全删除了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());
[还有另一种解决方案,可以使用正确的TimelineQueueNavigator创建MediaSessionConnector并与您的歌曲一起排队。在这种情况下,按钮会在磨损时出现,我在手表上检查了一下。