【问题标题】:Cast icon when changing volume via HW buttons通过硬件按钮更改音量时投射图标
【发布时间】:2015-07-01 10:47:22
【问题描述】:

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

此布局中有一个 Cast 图标,但它是白色的,并且它们的可见性非常差。例如,在 YouTube 应用程序中,相同的布局如下所示:

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

【问题讨论】:

    标签: android volume google-cast


    【解决方案1】:

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

    【讨论】:

    • 我这几天一直在寻找答案。从今天开始,YouTube 能够在后台控制投射设备的音量。它还显示了带有投射图标的系统音量控制。似乎无法弄清楚该怎么做。
    【解决方案2】:

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

    示例实现 - Android MediaRouter Volume events

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-29
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-04
      • 2014-08-10
      • 2013-03-05
      相关资源
      最近更新 更多