Java MediaController方法调整音量和MediaSession

Java MediaController方法调整音量和MediaSession,java,android,audio,Java,Android,Audio,我正在实现一个使用MediaController和MediaSession类的音频播放器。 我已经能够使用示例代码实现传输控件(播放、暂停、回放…),并实现MediaSession.Callback类来处理MediaController.TransportControls。还请注意,我对Android开发相对较新 我已经开始研究如何处理音频命令,并注意到MediaController定义了adjustVolume()和setVolumeTo()方法 我的问题是:为什么音量命令(可能还有其他音频命

我正在实现一个使用MediaController和MediaSession类的音频播放器。 我已经能够使用示例代码实现传输控件(播放、暂停、回放…),并实现MediaSession.Callback类来处理MediaController.TransportControls。还请注意,我对Android开发相对较新

我已经开始研究如何处理音频命令,并注意到MediaController定义了adjustVolume()和setVolumeTo()方法

我的问题是:为什么音量命令(可能还有其他音频命令,如BTBF、EQ设置…)的处理方式与传输命令类似? 换句话说,为什么没有MediaController.AudioControls类可以由MediaSession回调处理?

我看到有一个MediaController.PlaybackInfo类,它提供有关音频的各种信息。 MediaController类中还有一个sendCommand()方法,由MediaSession.callback中的onCommand()回调处理。类似地,MediaController.TransportControls中定义了SendCustomAction()方法,该方法由MediaSession.Callback中的onCustomAction()处理。 我很想使用这些命令来调整音频播放的各个方面,但我想确保我没有忽略要实现这一点的类。看起来MediaSession类可以有额外的方法(额外的嵌套类?)以类似于传输控件的方式处理音频控件。 提前谢谢。
Jim

MediaController公开的API或控件是与锁屏、通知或耳机媒体按钮远程控制相关的最常见的用例

  • 设计用于应用程序UI和管理MediaSession的服务之间的特定于应用程序的自定义命令。这非常适合您心目中的特定用例w.r.t EQ设置

  • 另一方面,适用于任何可由其他应用程序显示的PlaybackState.CustomAction。CustomAction的一个例子是将一个项目标记为收藏夹。(您可以在示例中看到这是如何在MusicService类中实现的)


  • 还请注意,可以在会话上设置一个类来接收有关更改/设置的回调。如果没有,会话将处理卷的更新。

    我想问一个与MediaController相关的后续问题。当我们提供音频时,我们的应用程序将成为焦点。似乎在很多情况下,MediaController和MediaSession都是在远程控制的上下文中提到的。我的问题是:如果我们不在远程控制用例中,那么使用MediaController和MediaSession模式是否不正确?(我认为这不会违反任何基本规则。)再次感谢。android核心工程师的回答:MediaSession可以用于活动或服务。它专为任何时候处理媒体按钮事件或希望系统和其他设备(如佩戴)能够获得播放内容的信息而设计。如果您不想编写自己的应用程序,它也可以用于应用程序进程之间的控制。只有在您调用setActive(true)时,它才会被发布。另外,请查看Activity.setMediaController,它是在前台接收媒体按钮事件的一种方式。@NageshsSusarla:VolumeProvider似乎对我不起作用,您能看一下吗?