开发类Spotify Car Thing的Android应用,能否读取当前播放媒体信息?
Android应用读取当前播放媒体信息的可行性与实现方案
可以,Android提供了成熟的API支持应用读取设备上当前播放的媒体信息并展示,以下是具体的实现思路和关键步骤:
通过MediaSessionManager监听活跃媒体会话
Android 5.0(API 21)及以上引入的MediaSessionManager是核心工具,它能帮你获取设备上活跃的媒体会话。你需要先获取该服务实例,再注册监听回调来捕获会话变化:val mediaSessionManager = getSystemService(MEDIA_SESSION_SERVICE) as MediaSessionManager val listener = object : MediaSessionManager.OnActiveSessionsChangedListener { override fun onActiveSessionsChanged(sessions: List<MediaController>) { // 取第一个活跃的媒体会话(通常是当前正在播放的) sessions.firstOrNull()?.let { controller -> // 从会话中提取媒体元数据 val metadata = controller.metadata val songTitle = metadata.description.title?.toString() val albumCover = metadata.description.iconBitmap // 这里将数据更新到你的UI组件即可 } } } // 传入媒体按钮接收组件(可自定义BroadcastReceiver或指定当前Activity) val componentName = ComponentName(this, MediaButtonReceiver::class.java) mediaSessionManager.addOnActiveSessionsChangedListener(listener, componentName)权限配置与用户授权
- Android 10(API 29)及以上:需要在Manifest中声明
android.permission.READ_MEDIA_PLAYBACK_STATE权限,并动态申请。 - Android 9(API 28)及以下:需要声明
android.permission.ACCESS_NOTIFICATION_POLICY权限,同时引导用户前往系统设置开启通知访问权限,否则无法获取媒体会话信息。
- Android 10(API 29)及以上:需要在Manifest中声明
获取实时播放数据与控制媒体
通过MediaController不仅能读取媒体元数据,还能通过其TransportControls实现播放、暂停、切歌等控制操作:// 监听播放状态和元数据变化 controller.registerCallback(object : MediaController.Callback() { override fun onMetadataChanged(metadata: MediaMetadata?) { // 实时更新歌曲标题、封面等UI内容 } override fun onPlaybackStateChanged(state: PlaybackState?) { // 根据播放状态(播放/暂停/缓冲等)更新控制按钮状态 } }) // 媒体控制示例 val transportControls = controller.transportControls transportControls.play() transportControls.pause() transportControls.skipToNext()
内容的提问来源于stack exchange,提问作者0324bence
相关产品推荐
相关产品推荐

