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

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

转眼间,在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好了。

 


  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值