android - 有没有办法获取当前播放歌曲的信息?

标签 android android-mediaplayer android-audiomanager

出于研究原因,我正在开发一个反射(reflect)第三方播放器应用播放器状态的应用。

我设法通过AudioManager了解了如何控制其他播放器的播放状态。 API,但我不知道如何获取任何其他播放器的当前歌曲信息,例如:

  • 歌曲名称;
  • 艺术家姓名,以及;
  • 当前歌曲位置。

有什么办法可以从 Android 获取这些数据吗?

最佳答案

根据我的研究,我只找到了一种方法来做到这一点,但不幸的是,这需要设备运行 Android >= 21 (Lollipop) 和用户的特殊许可 ( android.permission.BIND_NOTIFICATION_LISTENER_SERVICE )

使用 MediaSessionManager 可以知道设备上正在播放哪些媒体.为此,我们只需要获取 Activity 的 MediaController。有两种方式:

有了 Activity 的 MediaController ,我们可以通过它的可用函数从它们那里获取我们想要的信息。值得指出的是,每个播放器都以他们想要的方式填充其媒体 session 数据,因此很可能一个播放器几乎没有或根本没有有用数据,而另一个播放器有大量数据(Google 就是这种情况)播放音乐应用程序)。

我们可以强调的MediaController类的一些功能是:

值得注意的是,玩家可以将自定义数据放入 MediaController#getMetaData 包中。例如,Google Play Music 添加了其中两个:

  • “com.google.android.music.mediasession.METADATA_KEY_QUEUE_SIZE”,以及;
  • “com.google.android.music.mediasession.METADATA_KEY_QUEUE_POSITION”

调试可能是您了解它们的最好 friend 。


另一种奇特的实现方式是使用 MediaBrowserService .可以在这个article中进行详细阅读.


如果您知道更好的方法,特别是如果它不需要 android.permission.BIND_NOTIFICATION_LISTENER_SERVICE 权限,我们非常欢迎您贡献 :)

关于android - 有没有办法获取当前播放歌曲的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59052978/

相关文章:

android - 在服务中未收到 CountDownTimer 回调

Android:录音和保存音频

Android - 将 rtsp (h264) 流保存到 mp4 文件

Android 在应用程序中加载和播放声音的最快方式

java - 检测音乐播放完毕

android - 如何将一个简单的 Go 脚本作为 Android 服务运行?

java - 为什么在使用 Robolectric 的 Android 单元测试中调用 HtmlCompat 时会出现 ExceptionInInitializerError?

java - android开发需要JDK吗

android - 单击后退按钮时音乐播放器崩溃

android - 如何通过Android中的耳机发送音频输出?