2017年的最后一天了,把自己想要分享出来的蓝牙代码分享出来吧!
网上关于Android蓝牙4.0的博客已经非常多了,我对蓝牙的了解也多是来源于Google的Android文档、他人的博客和实践,关于更详细的了解,建议自己搜一些文章看一下,比如下面值得一看的博客,这里我更多的分享一下自己的代码和实践。
蓝牙的基本了解和连接:http://blog.csdn.net/chenliqiang12345678/article/details/50504406
蓝牙需要注意的坑:http://blog.csdn.net/qingtiantianqing/article/details/52459629?locationNum=13
蓝牙4.0需要先申请权限、再扫描设备、然后连接,对于M以上的Android系统,同时需要申请定位的权限,否则无法扫描到设备;
扫描到蓝牙设备后,可以用BluetoothDevice.connectGatt()方法进行连接,用返回的BluetoothGatt进行通信;
通过BluetoothGattCallback的方法判断不同状态,比如是否连接、断开、发现服务、可写入、可读取数据等;
蓝牙通信需要服务(BluetoothGattService)和服务的特征(BluetoothGattCharacteristic),一个设备可以有多个服务、一个服务可以有多个特征,一个特征可以有多个BluetoothGattDescriptor;
蓝牙设备的通信是通过特征发送和接收数据的,每个数据最大长度是20个字节;
在发现服务后,检查和获取对应UUID的服务和特征,如果想要进行通信,建议通过Handler在主线程设置提醒数据改变提醒,许多设备需要同时设置BluetoothGattDescriptor,需要注意下,如果设备无法接收到数据,建议设置一下;
就我开发过的蓝牙设备而言,只读和可读可写的比较多,大部分情况下是通过一个服务和服务对应的某一个特征,多个服务或特征分工协作的蓝牙模块若功能不多(一个服务的特征读,另一个服务的特征写;或一个特征读,一个特征写),是比较少见的。
蓝牙的扫描、连接、发送和接收数据,请参考Github上的Demo,里面有我参开别人的代码封装的16进制2进制互相转换的工具类和蓝牙4.0Library