Android 蓝牙体系学习记录-APP
这几年慢慢学聪明了一点, 每次遇到问题先把遇到的问题性质先研究一遍,甚至先花一天的时间把蓝牙APP框架的接口, 框架, 流程追一遍, 到明白咋回事了再去解决问题. 比起以前一头扎进代码里面解决问题的状态压力小很多.
最近遇到几个蓝牙相关的问题,
1.TV盒子, 设备连接蓝牙音箱, 蓝牙音箱关机状态开机后,设备不会连上音箱.
这个问题并不难, 主要要理解profile和设备的关系, 通过listener获取到profile后, 用profile的connect接口去连接设备即可.
2.把一个投影机设备做成一个蓝牙音箱. 用户可以手机连设备,把它当成手机的外放音箱一样使用, 做出来后, 手机推推歌曲, 播放下电影, 感觉还挺实用的.
这个功能一方面需要芯片模块支持a2dp sink profile, 另一方面我们还做了风扇和背光控制, 音箱模式嘛, 总不能投影着光亮着风扇转着. 做这个功能的时候还遇到一个声音卡顿的问题, 这是因为蓝牙芯片是和wifi功能一起的, 天线共用同一根, wifi在使用的时候, 蓝牙的射频接收会受到影响, 最终找模块厂更新蓝牙固件, 做了协调功能的解决了这个问题, 这个协调也导致wifi 吞吐量降低了十多兆.
接口
先说下APP常用的接口. 当我们去写一个APP时要用到蓝牙的时候, 通常我们会用到系统提供的API接口操作蓝牙, 常用的几个类.
BuletoothAdapter
BuletoothDevice
BluetoothServerSocket
BluetoothSocket
这几个类的源码在安卓源码frameworks/base/core/java/android/bluetooth目录下, 看看源码感觉APP编程简单很多, 边看框架边看源码对整个蓝牙会明白得比较快.