Android Wear媒体控件未显示上一个/下一个按钮

问题描述 投票:0回答:1

我正在开发媒体播放器。不幸的是,我无法使用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);

谢谢。

android bluetooth wear-os avrcp mediasession
1个回答
0
投票

我有类似的问题。原因是使用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并与您的歌曲一起排队。在这种情况下,按钮会在磨损时出现,我在手表上检查了一下。

© www.soinside.com 2019 - 2024. All rights reserved.