【问题标题】:Android Wear media control not showing previous/next buttonsAndroid Wear 媒体控件不显示上一个/下一个按钮
【发布时间】:2020-02-10 00:31:15
【问题描述】:

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

谢谢。

【问题讨论】:

  • 您能否在构造PlaybackState/PlaybackStateCompat 对象的位置添加代码,特别是在调用setActions() 的位置?
  • 我将代码添加到问题中。

标签: android bluetooth wear-os avrcp mediasession


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 2011-09-23
    • 2012-06-06
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多