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