有没有办法获取当前播放歌曲的信息?
Is there any way to fetch the info of the current playing song?
出于学习原因,我正在开发一个反映第三方播放器应用程序播放器状态的应用程序。
我通过AudioManager
API学会了如何控制其他播放器的播放状态,但是对于如何获取其他播放器,我一无所知' 当前歌曲信息,例如:
- 歌曲名称;
- 艺术家姓名,以及;
- 当前歌曲位置。
有什么办法可以从 Android 获取这些数据吗?
根据我的研究,我只找到了一种方法,但不幸的是,这需要设备 运行 Android >= 21 (Lollipop ) 和用户的特别许可 (android.permission.BIND_NOTIFICATION_LISTENER_SERVICE
)
可以通过两种方式使用 MediaSessionManager
. To do that, all we need is to fetch the active MediaController
了解设备上正在播放的媒体:
MediaSessionManager#getActiveSessions(...)
,以及;
MediaSessionManager#addOnActiveSessionsChangedListener(...)
.
有了活跃的MediaController
,我们可以通过它的可用功能从他们那里获取我们想要的信息。值得指出的是,每个播放器都以他们想要的方式填充其媒体会话数据,因此很可能一个播放器几乎没有或根本没有有用数据,而另一个播放器有大量数据(Google播放音乐应用程序)。
MediaController
class中我们可以强调的一些功能是:
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
. A detailed reading can be done in this article.
如果您知道更好的方法,特别是如果它不需要 android.permission.BIND_NOTIFICATION_LISTENER_SERVICE
许可,我们非常欢迎您贡献 :)
出于学习原因,我正在开发一个反映第三方播放器应用程序播放器状态的应用程序。
我通过AudioManager
API学会了如何控制其他播放器的播放状态,但是对于如何获取其他播放器,我一无所知' 当前歌曲信息,例如:
- 歌曲名称;
- 艺术家姓名,以及;
- 当前歌曲位置。
有什么办法可以从 Android 获取这些数据吗?
根据我的研究,我只找到了一种方法,但不幸的是,这需要设备 运行 Android >= 21 (Lollipop ) 和用户的特别许可 (android.permission.BIND_NOTIFICATION_LISTENER_SERVICE
)
可以通过两种方式使用 MediaSessionManager
. To do that, all we need is to fetch the active MediaController
了解设备上正在播放的媒体:
MediaSessionManager#getActiveSessions(...)
,以及;MediaSessionManager#addOnActiveSessionsChangedListener(...)
.
有了活跃的MediaController
,我们可以通过它的可用功能从他们那里获取我们想要的信息。值得指出的是,每个播放器都以他们想要的方式填充其媒体会话数据,因此很可能一个播放器几乎没有或根本没有有用数据,而另一个播放器有大量数据(Google播放音乐应用程序)。
MediaController
class中我们可以强调的一些功能是:
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
. A detailed reading can be done in this article.
如果您知道更好的方法,特别是如果它不需要 android.permission.BIND_NOTIFICATION_LISTENER_SERVICE
许可,我们非常欢迎您贡献 :)