一直以来,Android对于蓝牙的支持都很混乱,简直可以说是一坨shit。各个版本的协议栈都不一样,最早用的是bluez,进入4.x时代之后,换成了谷歌自己的bluedroid。换就换吧,至少等做完了再用吧,结果4.2、4.3、4.4的bluedroid全都不一样。这就对我等非专业蓝牙开发人员开发蓝牙制造了巨大的麻烦。
好了,吐槽到此为止,该说正事了。因为公司在做智能家居项目,需要在Android上实现蓝牙A2dp Sink的profile,这样我们的设备就能当蓝牙音箱来用了。我们是用的平台是全至A20,蓝牙模块是博通的一款bt+wifi的集成模块,sdk的版本是Android4.2。据我们了解,Android4.x的官方sdk中蓝牙A2dp只实现了source,也就是只能作为播放音乐的源,将音频数据传出去。博通自己有支持蓝牙A2dp Sink的协议栈,但是只支持Android4.4的。Realtek在Android4.2的协议栈上实现了A2dp Sink,但是受制于我们已经生产出去的版本都是使用的博通的模块,realtek这条路只能死心了。正当我们五路可走的时候,好消息来了,Android5.0发布了,而且“据说”是已经实现了A2dp Sink。好吧,那就移植吧。
我会将整个的移植分为如下几个部分进行描述:
1、Android中蓝牙音频系统基础知识;
2、移植蓝牙协议栈;
3、实现蓝牙音频播放;