出于研究原因,我正在开发一个反映第三方播放器应用程序播放器状态的应用程序。
我设法通过AudioManager
API来了解如何控制其他播放器的播放状态,但是当我不知道如何获取其他播放器的当前歌曲信息时,我一无所知,例如:
有什么办法可以从Android提取此数据吗?
从我的研究中,我仅找到一种方法来执行此操作,但不幸的是,该方法要求设备运行Android> = 21(Lollipop)并获得用户的特殊许可(AudioManager
)
使用android.permission.BIND_NOTIFICATION_LISTENER_SERVICE
可以知道设备上正在播放哪种媒体。为此,我们所需要做的就是以两种方式获取活动的android.permission.BIND_NOTIFICATION_LISTENER_SERVICE
:
MediaSessionManager
和;MediaSessionManager
。手握有效的MediaController
,我们可以通过其可用功能从中获取所需的信息。值得一提的是,每个播放器都按照他们想要的方式填充其媒体会话数据,因此很可能一个播放器几乎没有或根本没有有用的数据,而另一个播放器却有大量的数据(Google就是这种情况)播放音乐应用)。
我们可以突出显示的MediaController
类的一些功能是:
MediaSessionManager#getActiveSessions(...)
MediaSessionManager#getActiveSessions(...)
;MediaSessionManager#addOnActiveSessionsChangedListener(...)
和;MediaSessionManager#addOnActiveSessionsChangedListener(...)
。很高兴注意到玩家可以将自定义数据放入MediaController
捆绑包中。例如,Google Play音乐添加了两个:
MediaController
和;MediaController#getMetaData
。调试可能是认识他们的最好的朋友。
实现此目标的另一种理想方式是通过使用MediaController#getMetaData
。可以在此MediaController#getPlayerState
中进行详细阅读。
如果您知道一种更好的方法,特别是如果不需要MediaController#getPlayerState
许可,欢迎您提供帮助:)