1

在处理 MediaPlayer 和 MediaSession 类时,我试图了解这两个 Android 构造中的每一个实际上是什么,当然它们是如何工作的,尤其是传输控件。

从有关 MediaSession 的官方文档中,它

允许与媒体控制器、音量键、媒体按钮和传输控件进行交互。

据我了解,媒体按钮是指设备上的实际物理按钮(如果存在)或例如。在蓝牙耳机上。音量键很明显。

当谈到媒体控制器时,我想我设法弄清楚它指的是一个特定的视图,具有播放/暂停按钮以及跳过下一个/上一个等按钮的 FrameView。但是传输控件到底是什么,在哪里可以/应该使用它们以及它们是如何在代码中实现的?

提前感谢您的任何答案!

4

1 回答 1

2

以供自己或他人日后参考,MediaPlayer本质上就像立体声播放器的内部机制,直接“内部”控制声音的播放。你确实有函数,比如 play()、pause()、skipToNext() 等。

当你想创建一个音乐应用程序时,你通常会实现一个客户端服务模型,应用程序接口是你的客户端(在主 UI 线程中),服务将播放音乐(也在后台)。Google 所做的是实现了一个专门针对音乐和视频的客户端服务模型MediaSession(Compat)。它有自己的服务类型,会话状态(当你想要通知时,Android Wear 或 Auto,让他们知道应用程序是在播放还是暂停,可以获取曲目信息和专辑图片等,以便一切顺利在所有这些平台上同步),以及需要为不同功能实现的MediaController及其回调。

它的一个选项是getTransportControls(),它本质上是当您按下前面提到的立体声播放器上的 play()、pause() 等按钮时发生的情况的高级表示。对于这些中的每一个,您 @Override 它们各自的 onPlay()、onPause() 回调方法,以在控制您的音乐的MediaPlayer对象上执行您想要的确切功能。在这里,您可以调用 MediaPlayer.play() 函数,以及设置 MediaSession 的播放状态,可能更新通知等。

至于其他,音量键确实是音量键,而媒体按钮确实是您可能拥有的物理按钮(蓝牙耳机、带播放按钮的耳机等),您可以设置您的应用程序以便它识别和使用他们。

对于有兴趣更好地看到这一点的人,下面是我的应用程序项目的回购。虽然远非一个功能齐全、没有错误的应用程序,但它确实实现了 MediaSession 和服务,以及非常完美的通知和 MediaButton 控件。

https://github.com/RockBoyEmy/GESMediaPlayer

还要感谢@pantos27 的帮助

于 2018-08-14T09:59:36.680 回答