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

Aug*_*rmo 3 android android-mediaplayer android-audiomanager

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

我设法了解如何通过AudioManagerAPI 控制其他播放器的播放状态,但当涉及到如何获取任何其他播放器当前的歌曲信息时,我却一无所知,例如:

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

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

Aug*_*rmo 5

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

可以使用 来了解设备上正在播放哪些媒体MediaSessionManager。为此,我们需要MediaController通过两种方式获取 active :

有了active MediaController,我们就可以通过它的可用功能从它们那里获取我们想要的信息。值得指出的是,每个玩家都按照自己想要的方式填充其媒体会话数据,因此很可能一个玩家几乎没有有用的数据,而另一个玩家则拥有大量有用的数据(Google 的情况就是如此)播放音乐应用程序)。

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

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

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

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


实现这一目标的另一种奇特方法是使用MediaBrowserService. 可以详细阅读这篇文章


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