通过 HW 按钮更改音量时投射图标

Cast icon when changing volume via HW buttons

我正在开发一个支持 GoogleCast 的应用程序。我正在使用 CastCompanionLibrary,一切正常,但我的应用程序中存在一个小问题。 我需要更改布局,以防用户通过 HW 按钮更改音量。在我的应用程序中,布局如下所示:

这个布局中有一个Cast图标,但是是白色的,而且能见度很差。例如,在 YouTube 应用程序中,相同的布局如下所示:

所以,我的问题很简单:如何更改布局,或者如何更改布局中的 Cast 图标?我在 CastCompanionLibrary 中没有看到它。 感谢您的任何建议。

据我所知,您在更改音量时看到的 UI 是由系统通过 MediaSession 或 RemoteControlClient 等提供的,而不是应用程序本身提供的。因此,我不知道有什么方法可以改变它。你在YT看到的UI是自定义的UI,音量的处理是通过app完成的;事实上,如果您将 YT 应用程序发送到后台并更改音量,您会看到一个不同的 UI,因此他们似乎决定自己捕获硬件音量并提供他们自己的自定义 UI。只要您的应用程序在前面,这是可行的;一旦它失去焦点(例如当它进入后台时),您的应用程序就不会收到音量键事件并且您的应用程序不能做太多事情(YT 也会发生这种情况)。尝试 Google 播放音乐,看看当您在投射时改变音量时他们的 UI 看起来如何。

为了实现这一点,播放器服务必须维护 "active" MediaSessionCompat。该服务应主动将媒体播放器的播放状态与 MediaSessionCompat 同步。除此之外,服务必须在其初始化时使用媒体会话调用 MediaRouter#setMediaSessionCompat()。 如果满足所有这些条件,则在投射时,服务可以调用 MediaSessionCompat#setPlaybackToRemote(VolumeProviderCompat)。然后,每当播放器处于 "playing" 状态时,音量事件将传递给调用 VolumeProviderCompat 的 MediaSession。要切换回常规媒体控件,即在投射会话结束时,该服务可以调用 MediaSessionCompat#setPlaybackToLocal(AudioManager.STREAM_*).

实施示例 -