android蓝牙ble开发经验总结

665 阅读2分钟

Ble蓝牙

ble蓝牙即低功耗蓝牙,也是目前比较流行的一种。它相比于经典蓝牙不同在于他有独有的体系和协议,经典蓝牙更多的是基于socket。

广播包

基本的搜索-绑定-配对-通信就不多赘述了,主要是需要注意一个叫蓝牙广播包的一个东西,BLE 外设开始工作时,会发出广播让中心设备发现,广播的数据包中带有外设的相关信息,比如设备的MAC地址,名字,Service 列表的uuid等等。 代码参考如下:

//设置广播报文
mAdvertiseData = AdvertiseData.Builder()
    //设置广播包中是否包含设备名称。
    .setIncludeDeviceName(true)
    //设置广播包中是否包含发射功率
    .setIncludeTxPowerLevel(true)
    //设置UUID
    .addServiceUuid(ParcelUuid(UUID_SERVICE2))
    .build()

//设置广播扫描响应报文(可选)
mScanResponseData = AdvertiseData.Builder()
    //自定义服务数据,将其转化为字节数组传入
    .addServiceData(ParcelUuid(UUID_SERVICE2), byteArrayOf(2,3,4))
    //设备厂商自定义数据,将其转化为字节数组传入
    .addManufacturerData(0x06, byteArrayOf(1,2,3))
    .build()

0x06代表 非完整的 128 bit UUID 具体Type可参考下面文章

广播包解析格式

既然涉及到广播包就要涉及到解析,可参考这位大佬的文章:blog.csdn.net/ganduwei/ar…

需要注意的坑

  • Sercice 和 Characteristic都有他们独立的uui,外围设备和中心设备的uuid对应上才能进行读写通信
  • UUID格式(自定义):0x0000xxxx-0000-1000-8000-00805F9B34FB (xxxx)为自定义
  • 切勿在蓝牙回调方法里面做延时操作或复杂好耗时运算

分享