and*_*per 3 android playback android-notifications
我想看看是否可以获得有关当前正在播放的歌曲的信息,以便能够显示有关该歌曲的更多信息,或者仅显示我获得的信息。
我想检查一下,因为我注意到在一个名为“Musicolet”的流行音乐播放器应用程序上有一个“广播专辑封面”的设置(此处)。当然,它只说“专辑艺术”,但它也说它适用于“第三方”。所以我想研究一下是否可能。
不确定是否可能。我看到关于它的相互矛盾的答案。
我发现了一些关于它的有趣链接:
当然,我尝试使用从这些链接中找到的提示,但未能真正发挥作用。
所以也许过去是不可能的,后来就有可能了。但由于某种原因,我没有看到如何使用它的示例/教程,包括文档中的示例/教程。
我认为如果可能的话,它需要通知访问,因为这与从音乐播放器的通知中读取当前播放的音乐大致相同。
是否可以注册歌曲播放时间的回调(也可以随时查询)并获取有关它的信息?
意思是歌曲标题、专辑名称、文件路径/uri、专辑封面...
如果可以的话,怎样做?它需要什么?
如果不可能,有什么解决方法吗?有什么适用于某些应用程序的东西吗?也许通知中存在某种东西,更正式地说,我可以检测到它是这种类型的,并获取此信息?
您需要有通知侦听器服务,否则第三方应用程序无法访问媒体会话。
在某处声明服务:
import android.service.notification.NotificationListenerService
class NotiService : NotificationListenerService()
Run Code Online (Sandbox Code Playgroud)
将其添加到清单中:
<service android:name=".service.NotiService"
android:label="Enable media controls"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
然后你可以将它作为参数传递给getActiveMediaSessionsActivity 内部:
val m = getSystemService<MediaSessionManager>()!!
val component = ComponentName(this, NotiService::class.java)
val sessions = m.getActiveSessions(component)
Log.d("Sessions", "count: ${sessions.size}")
sessions.forEach {
Log.d("Sessions", "$it -- " + (it?.metadata?.keySet()?.joinToString()))
Log.d("Sessions", "$it -- " + (it?.metadata?.getString(MediaMetadata.METADATA_KEY_TITLE)))
}
Run Code Online (Sandbox Code Playgroud)
现在导航到“系统设置”->“通知访问”并启用它NotiService,它应该可以正常运行。
| 归档时间: |
|
| 查看次数: |
3034 次 |
| 最近记录: |