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

Is there any way to fetch the info of the current playing song?

出于学习原因,我正在开发一个反映第三方播放器应用程序播放器状态的应用程序。

我通过AudioManagerAPI学会了如何控制其他播放器的播放状态,但是对于如何获取其他播放器,我一无所知' 当前歌曲信息,例如:

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

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

可以通过两种方式使用 MediaSessionManager. To do that, all we need is to fetch the active MediaController 了解设备上正在播放的媒体:

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

MediaControllerclass中我们可以强调的一些功能是:

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

  • "com.google.android.music.mediasession.METADATA_KEY_QUEUE_SIZE" 和;
  • "com.google.android.music.mediasession.METADATA_KEY_QUEUE_POSITION".

调试可能是你了解它们的最好朋友。


另一种奇特的实现方式是使用 MediaBrowserService. A detailed reading can be done in this article.


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