媒体控制器与传输控件的区别 Android
Difference media controller vs. transport controls Android
我试图了解这两个 Android 构造中的每一个实际上是什么,当然还有它们在处理 MediaPlayer 和 MediaSession 类 时如何工作,尤其是传输控制。
从关于 MediaSession 的官方文档来看,
Allows interaction with media controllers, volume keys, media buttons, and transport controls.
据我了解,媒体按钮是指设备上的实际物理按钮(如果存在)或例如。在蓝牙耳机上。音量键很明显。
谈到媒体 控制器 我想我设法弄清楚它指的是一个特定的视图,具有 play/pause 按钮的 FrameView 以及跳过 next/previous 等。但是 传输控制 到底是什么,它们在哪里 can/should 使用以及如何在代码中实现?
提前感谢您的回答!
供自己或他人参考,MediaPlayer 本质上类似于立体声播放器的内部机制,直接控制声音播放,"internally"。你确实有函数,比如 play()、pause()、skipToNext() 等。
当你想创建一个音乐应用程序时,你通常会实现一个客户端服务模型,应用程序界面是你的客户端(在主 UI 线程中),服务将播放音乐(也在背景中)。 Google 所做的是实施专门针对音乐和视频的客户端服务模型,MediaSession(Compat)。它有自己的服务类型,会话状态(当你想要通知时,Android磨损或自动,所以他们知道应用程序是否正在播放或暂停,可以获取曲目信息和专辑图像等。所以所有这些平台上的所有内容都同步良好),以及 MediaController 及其需要针对不同功能实现的回调。
其中一个选项是 getTransportControls(),它本质上是当您按下 play()、pause()、等前面提到的立体声播放器上的按钮。对于其中的每一个,您都可以 @Override 各自的 onPlay()、onPause() 回调方法,以在控制您的音乐的 MediaPlayer 对象上执行您想要的确切功能。在这里您可以调用 MediaPlayer.play() 函数,以及设置 MediaSession 的播放状态,可能会更新通知等。
至于其他,音量键确实是音量键,媒体按钮确实是您可能拥有的物理按钮(蓝牙耳机,带播放按钮的耳机等。 ) 您可以设置您的应用程序,使其识别并使用它们。
对于任何有兴趣更好地了解这一点的人,下面是我的应用程序项目的回购协议。虽然远非一个功能齐全、无错误的应用程序,但它确实实现了 MediaSession 和服务,加上通知和 MediaButton 控件非常完美。
https://github.com/RockBoyEmy/GESMediaPlayer
也感谢@pantos27 的帮助
我试图了解这两个 Android 构造中的每一个实际上是什么,当然还有它们在处理 MediaPlayer 和 MediaSession 类 时如何工作,尤其是传输控制。
从关于 MediaSession 的官方文档来看,
Allows interaction with media controllers, volume keys, media buttons, and transport controls.
据我了解,媒体按钮是指设备上的实际物理按钮(如果存在)或例如。在蓝牙耳机上。音量键很明显。
谈到媒体 控制器 我想我设法弄清楚它指的是一个特定的视图,具有 play/pause 按钮的 FrameView 以及跳过 next/previous 等。但是 传输控制 到底是什么,它们在哪里 can/should 使用以及如何在代码中实现?
提前感谢您的回答!
供自己或他人参考,MediaPlayer 本质上类似于立体声播放器的内部机制,直接控制声音播放,"internally"。你确实有函数,比如 play()、pause()、skipToNext() 等。
当你想创建一个音乐应用程序时,你通常会实现一个客户端服务模型,应用程序界面是你的客户端(在主 UI 线程中),服务将播放音乐(也在背景中)。 Google 所做的是实施专门针对音乐和视频的客户端服务模型,MediaSession(Compat)。它有自己的服务类型,会话状态(当你想要通知时,Android磨损或自动,所以他们知道应用程序是否正在播放或暂停,可以获取曲目信息和专辑图像等。所以所有这些平台上的所有内容都同步良好),以及 MediaController 及其需要针对不同功能实现的回调。
其中一个选项是 getTransportControls(),它本质上是当您按下 play()、pause()、等前面提到的立体声播放器上的按钮。对于其中的每一个,您都可以 @Override 各自的 onPlay()、onPause() 回调方法,以在控制您的音乐的 MediaPlayer 对象上执行您想要的确切功能。在这里您可以调用 MediaPlayer.play() 函数,以及设置 MediaSession 的播放状态,可能会更新通知等。
至于其他,音量键确实是音量键,媒体按钮确实是您可能拥有的物理按钮(蓝牙耳机,带播放按钮的耳机等。 ) 您可以设置您的应用程序,使其识别并使用它们。
对于任何有兴趣更好地了解这一点的人,下面是我的应用程序项目的回购协议。虽然远非一个功能齐全、无错误的应用程序,但它确实实现了 MediaSession 和服务,加上通知和 MediaButton 控件非常完美。
https://github.com/RockBoyEmy/GESMediaPlayer
也感谢@pantos27 的帮助