Android手机连接蓝牙播放时,蓝牙设备如何显示歌名、专辑、歌手等信息?

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

当这个问题客服反馈给我的时候,我一脸懵逼,面对各种前辈们留下的坑,我必须说,我一定要把坑一个一个的填好。

纵然百度,google,真心发现,直观的信息并没有。千里之外,始于足下。


经过望、闻、问、切,发现android提供了一个东西RemoteControlClient, 看下官方的解释:

RemoteControlClient enables exposing information meant to be consumed by remote controls capable of displaying metadata, artwork and media transport control buttons.    RemoteControlClient暴露信息给具有遥控功能的显示媒体、艺术品和按钮控制设备。(请忽略本人的翻译不准确性

关于RemoteControlClient的使用这里不做解释,但是要知道这个东西跟线控耳机的注册有关,以至于后来优化mediabutton注册策略时狠狠的坑了我一把。

MetadataEditor metadata = mRemoteControlClient.editMetadata(true);
metadata.putString(MediaMetadataRetriever.METADATA_KEY_TITLE,  "歌曲名称");
metadata.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM,  "专辑名称");
metadata.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST,  "歌手名称");
metadata.putString(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST,  "专辑歌手");
metadata.putLong(MediaMetadataRetriever.METADATA_KEY_DURATION,  duration);
metadata.apply();

MetadataEditor是RemoteControlClient的一个可修改metadata的对象,用来填充要显示的信息。

完成了这一步,基本30%的蓝牙设备是可以显示信息,但是还有68%的设备需要用另一个方式传送。这种方法太简单,直接show code

Intent mediaIntent = new Intent("com.android.music.metachanged");
mediaIntent.putExtra("artist", "歌手名称");
mediaIntent.putExtra("track", "歌曲名称");
mediaIntent.putExtra("album", "专辑名称");
mediaIntent.putExtra("duration", (Long) duration));
mediaIntent.putExtra("playing", (boolean) playing); //播放状态
getContext().sendBroadcast(mediaIntent); //豆沙绿的背景看起来是不是眼睛舒服多了.......
做完这一步,98%的蓝牙设备都能正常显示了,但是请记住,发送完这个广播之后,如果执行了metadata.clear(), m etadata.apply(),你的信息就被清除了。

于是乎,本人破解了QQ音乐、小米音乐等APP, 发现他们也是这么写的,OK那就没问题了。

但是别忘了,还有2%的解决不了,为什么呢?

部分三星手机搞不掂(在官网论坛看到一个说法,跟自身的适配有关);

部分车载蓝牙显示异常(前面增加数字相关的字符串,其实我想说,车载蓝牙可能是一个很混乱的行业,不过腾讯、苹果等土豪已经涉足合作了,也许未来能统一起来

如果没有统一的标准,会造成很大的麻烦。

比如,客户反馈一台宝马三系用我们产品蓝牙显示异常,于是我们真的去租了一辆宝马三系用来调试。不要质疑我们的行为,我很负责的告诉你,我们很敬业


现在说一下,为什么我要写这篇文章。

第一,我没有看到关于蓝牙显示的分析文章,我做了一个开头,抛砖引玉;

第二,积累的这些知识,未来继续用的可能性也不是很大,毕竟不是重点,但这些是要点,或者忘记,或者留念;

第三,虽然我很忙,但是我还是想抽时间写点东西;

第四,就算是为了社会主义的发展,为了人类文明的进步(此处zhuang B)。


认为我写的不错的同学,可以用物质支(qiu)持(da)一(shang)下,下面是微信二维码。




你可能感兴趣的:(Android手机连接蓝牙播放时,蓝牙设备如何显示歌名、专辑、歌手等信息?)