服务中CastPlayer的音量控制流错误

时间:2018-11-07 17:10:44

标签: android google-cast exoplayer google-cast-sdk

我正在使用ExoPlayer Google Cast扩展v2.8.4。使用CastPlayer播放内容时,设备的物理音量按钮应控制接收器设备的音量。当CastPlayer包含在Activity中时,此行为的行为符合预期。但是,当CastPlayer包含在服务(例如MediaBrowserServiceCompat)中时,物理音量按钮会更改发送方设备的媒体音量。

我创建了2个示例项目来演示该问题:

如下图所示,投射设备的音量确实出现在完整音量控件视图中,但是当CastPlayer处于服务状态时,手机的媒体音量是活动控件流。

是否可以在Service实现中设置适当的音量控制流?

enter image description here

2 个答案:

答案 0 :(得分:1)

我已经确定了问题,原因不是由于ExoPlayer或Cast扩展程序中的错误。 This commit中的CastVolumeControlServiceTest解决了该问题。

在调试并查看了设备的日志后,我发现音量键事件被定向到活动的MediaSession。通过将MediaSession设置为非活动状态,音量控制流将控制接收器设备,因此解决方案是将MediaSession切换为活动/非活动状态,具体取决于哪个Player当前。

这似乎并不直观,但可以。

答案 1 :(得分:0)

此错误的解决方法是在将PendingResult发送到强制接收器之前,将MediaSession状态设置为STATE_PLAYING。

val playbackState = PlaybackStateCompat.Builder()
.setState(PlaybackStateCompat.STATE_PLAYING, <position>, <playbackSpeed>)
.build()

mediaSession.setPlaybackState(playbackState)

<send action to cast>

然后,您不必将MediaSession设置为非活动状态。