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);

谢谢你。

4

1 回答 1

2

我有类似的问题。原因是使用 exoplayer 的 MediaSessionConnector 覆盖媒体按钮功能。默认情况下,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_ITEM)作为 MediaSessionConnector 的一部分。在“中”页面查看详细信息

为了修复它,我从代码中完全删除了 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 并与您的歌曲一起排队。在这种情况下,按钮会出现在磨损操作系统上,我在手表上检查过。

于 2020-01-04T20:45:19.877 回答