android - Android 媒体 Controller 与传输控件的区别

标签 android android-mediaplayer android-mediasession

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

从关于MediaSession的官方文档来看,它

Allows interaction with media controllers, volume keys, media buttons, and transport controls.

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

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

预先感谢您的任何回答!

最佳答案

为了我自己或其他人将来的引用,MediaPlayer 本质上类似于立体声播放器的内部机制,并直接“在内部”控制声音播放。你确实有函数,比如 play()、pause()、skipToNext() 等。

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

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

至于其他,音量键确实是音量键,媒体按钮确实是您可以设置的物理按钮(蓝牙耳机、带播放按钮的耳机等)升级您的应用,使其识别并使用它们。

对于任何有兴趣更好地了解这一点的人,下面是我的应用程序项目的 repo 协议(protocol)。尽管远非功能齐全、无错误的应用程序,但它确实实现了 MediaSession 和服务,加上通知和 MediaButton 控件非常完美。

https://github.com/RockBoyEmy/GESMediaPlayer

也感谢@pantos27 的帮助

关于android - Android 媒体 Controller 与传输控件的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49227794/

相关文章:

android - 无法解析符号 'MediaSessionCompat'

android - 如何为 ExoPlayer v2.5+ 使用 MediaSession 扩展

java - 简单的Java问题

java - 如何去除Android中自定义对话框的白边?

android - 如何使用我的 Android 移动应用程序以分贝为单位设置音量?

android - AudioManager.requestAudioFocus on Lollipop 及更高版本

android - Android:更改背景颜色后,声音应用崩溃

android - 无法访问 Adob​​e Native Extension Android 布局 xml

Android mediaplayer 音乐暂停有时不起作用

java - MediaControllerCompat 和 MediaSessionCompat Android X?