Android蓝牙播放如何显示歌曲信息?

本文详细介绍了在Android设备上通过蓝牙播放音乐时,如何在蓝牙设备上显示歌曲名、歌手、专辑等信息的过程。涉及到的关键技术包括A2DP、AVRCP协议,以及RemoteControlClient和Avrcp的交互。文中通过分析Android 4.3及5.0以上系统的差异,展示了如何使用MediaSession与RemoteControlClient结合,以及如何通过发送广播`com.android.music.metachanged`来兼容更多蓝牙设备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转眼间,在XX音乐(国内著名音乐APP公司)工作了1年多了,作为Android多媒体开发的主力,必须奉上一点知识了。

今天,先说一下android播放音乐时如何在蓝牙设备上显示歌曲名、歌手、专辑等信息的。

 

在那个风和日丽、鸟语花香的日子,突然客服Miss Hu发来一个消息,问我说,有用户反馈说在车载蓝牙上播放歌曲看不到歌曲名、歌手、专辑等信息。

我当时虽然不是一脸懵逼,但对这个问题而言确实是只知其一不知其二。

其一,代码中并没有任何直接与蓝牙相关的任何操作;

其二,真不清楚如何控制蓝牙显示的。于是乎,开始深入这个问题......

 

一、首先,讲一下Android上面蓝牙的部分规范

截止到现在,世界上已经发布了约40个蓝牙应用规范。先介绍一下最常用的2个。分别是:

1.Advanced Audio Distribution Profile 简称为A2DP(高质量音频分发规范)定义了如何将立体声质量的音频通过流媒体的方式从媒体源传输到接收器上A2DP有两种应用场景分别是播放和录音

2.Audio Video Remote Control Profile  简称为AVRCP定义了蓝牙设备和audio/video控制功能通信的特点和过程。该Profile定义了AV/C数字命令控制集。命令和信息通过AVCTP协议进行传输。

也就是说,连接蓝牙耳机的时候一般使用A2DP协议,而控制和显示通过AVCTP协议实现。

 

 上图来自Google I/O 2013 - Best Practices for Bluetooth Development

那么谷歌是怎么推荐通过Avrcp在蓝牙设备上显示歌曲信息的呢?请看下图

 

顺便附上视频链接,分秒都给你seek到了,看不了youtube的自己想办法

https://www.youtube.com/watch?v=EC5-cEbr520&feature=youtu.be&t=25m18s

 

二、那我们去深入一下RemoteControlClientAvrcp (此时已是身不由己)

RemoteControlClient enables exposing information meant to be consumed by remote controls capable of displaying metadata, artwork and media transport control buttons.    

RemoteControlClient暴露信息给具有遥控功能的显示媒体、艺术品和按钮控制设备。(请忽略本人的翻译不准确性大笑

 

根据谷歌的说法,先往AudioManager里面注册一个RemoteControlClient实例,然后获取MetaDataEditor,往里面填充信息,然后执行MetaDataEditor.apply(),就是这么easy;

MetaDataEditor是什么? 这个不要问了,随便瞟两眼就知道了。

那么apply里面做了什么呢?

先看一下Android 4.3的源码,这里为什么先说这个版本,因为5.0系统与这个不一样,后面再详细解释。

 

apply里面根据参数不同,执行了不同的代码,我们只看sendMetadata_syncCacheLock好了。

 


要在Android上使用蓝牙AVRCP(音频/视频远程控制配置文件)显示歌曲封面,你需要做以下几步: 1. 首先,确保你的蓝牙设备支持AVRCP 1.3或更高版本。这是支持显示歌曲封面的必要条件。 2. 在你的Android应用中,你需要实现蓝牙音乐播放器功能。你可以使用Android提供的蓝牙API来实现与蓝牙设备的连接和音乐播放控制功能。 3. 在连接蓝牙设备之后,你可以使用Android的MediaMetadataRetriever类来获取当前播放音乐文件的元数据,包括封面图像。 4. 通过MediaMetadataRetriever类的getEmbeddedPicture()方法,你可以获取到音乐文件中嵌入的封面图像。这个方法将返回一个字节数组,表示图像的二进制数据。 5. 将获取到的封面图像字节数组转换为Bitmap对象,并在你的应用界面上显示出来。 6. 此外,你还需要设置适当的权限和广播接收器来处理蓝牙连接和音乐播放状态的变化。例如,你可以注册一个BroadcastReceiver来监听ACTION_MEDIA_METADATA_CHANGED和ACTION_MEDIA_PLAYBACK_STATE_CHANGED等广播事件,以便在歌曲元数据或播放状态发生变化时更新显示的封面图像。 需要注意的是,不同的音乐文件格式可能使用不同的方式嵌入封面图像。因此,你可能需要根据音乐文件的格式来选择合适的方法来获取封面图像。同时,由于蓝牙设备的兼容性和规范限制,某些设备可能无法显示歌曲封面,所以在实现时需要进行适当的测试和兼容性考虑。 希望这些步骤对你有帮助!祝你成功实现蓝牙AVRCP显示歌曲封面的功能!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值