出于研究原因,我正在开发一个反射(reflect)第三方播放器应用播放器状态的应用。
我设法通过AudioManager
了解了如何控制其他播放器的播放状态。 API,但我不知道如何获取任何其他播放器的当前歌曲信息,例如:
- 歌曲名称;
- 艺术家姓名,以及;
- 当前歌曲位置。
有什么办法可以从 Android 获取这些数据吗?
最佳答案
根据我的研究,我只找到了一种方法来做到这一点,但不幸的是,这需要设备运行 Android >= 21 (Lollipop) 和用户的特殊许可 ( android.permission.BIND_NOTIFICATION_LISTENER_SERVICE
)
使用 MediaSessionManager
可以知道设备上正在播放哪些媒体.为此,我们只需要获取 Activity 的 MediaController
。有两种方式:
- >
MediaSessionManager#getActiveSessions(...)
, 和; - >
MediaSessionManager#addOnActiveSessionsChangedListener(...)
.
有了 Activity 的 MediaController
,我们可以通过它的可用函数从它们那里获取我们想要的信息。值得指出的是,每个播放器都以他们想要的方式填充其媒体 session 数据,因此很可能一个播放器几乎没有或根本没有有用数据,而另一个播放器有大量数据(Google 就是这种情况)播放音乐应用程序)。
我们可以强调的MediaController
类的一些功能是:
- >
MediaController#getMetaData
- >
MediaController#getPlayerState
; - >
MediaController#getQueue
, 和; - >
MediaController#getQueueTitle
.
值得注意的是,玩家可以将自定义数据放入 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/