转眼间,在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)下,下面是微信二维码。