出于研究原因,我正在开发一个反映第三方播放器应用程序的播放器状态的应用程序。
我设法了解如何通过AudioManager
API 控制其他播放器的播放状态,但在知道如何获取任何其他播放器的当前歌曲信息时,我一无所知,例如:
- 歌曲名称;
- 艺术家姓名,以及;
- 当前歌曲位置。
有什么办法可以从Android获取这些数据吗?
根据我的研究,我只找到了一种方法,但不幸的是,这需要设备运行Android>= 21(棒棒糖(和用户的特殊许可(android.permission.BIND_NOTIFICATION_LISTENER_SERVICE
(
可以使用MediaSessionManager
知道设备上正在播放哪些媒体。为此,我们所需要的只是通过两种方式获取活动MediaController
:
MediaSessionManager#getActiveSessions(...)
和;MediaSessionManager#addOnActiveSessionsChangedListener(...)
.
有了活跃的MediaController
,我们就可以通过其可用功能从他们那里获得我们想要的信息。值得指出的是,每个播放器都以他们想要的方式填充其媒体会话数据,因此很可能一个播放器几乎没有或根本没有有用的数据,而另一个玩家拥有大量数据(Google Play 音乐应用程序就是这种情况(。
我们可以强调的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"
.
调试可能是您了解他们的最佳朋友。
实现这一目标的另一种奇特方法是通过使用MediaBrowserService
.本文可以进行详细阅读。
如果您知道更好的方法来执行此操作,特别是如果它不需要android.permission.BIND_NOTIFICATION_LISTENER_SERVICE
许可,我们非常欢迎您贡献:)