【问题标题】:Is there any way to fetch the info of the current playing song?有没有办法获取当前播放歌曲的信息?
【发布时间】:2019-11-26 14:19:39
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android android-mediaplayer android-audiomanager


    【解决方案1】:

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

    使用MediaSessionManager 可以知道设备上正在播放哪些媒体。为此,我们只需要通过两种方式获取活动的MediaControllers:

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

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

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

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

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


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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2010-11-22
      相关资源
      最近更新 更多