Android 5 以上版本的低功耗蓝牙(BLE)通讯

公司在14年开始做一款智能运动产品,之后集成了蓝牙,与手机app之间可以交换文件和数据,因为这款智能运动产品要长续航和小巧,难免电池容量小,为了降低功耗于是采用了 nRF51822 这款芯片,接下来的大段时间都花在 android 和这款智能设备的通讯上。

因为和产品间交换的数据内容比较多样,有文件交换,从设备到手机,从手机到设备,除了文件,还有协议,除了协议还有实时数据,所以用到了 BLE 的 UART 服务。

说说 android 蓝牙的坑,使用蓝牙扫描是需要位置权限的,所以扫描之前要开启 GPS 和蓝牙,而且这个最好不要自己写了,我遇到过打开 GPS 时候, onActivityResult 返回值不一致的问题。所以最好用一些第三方库检测权限。扫描蓝牙设备也出现了一些兼容性问题,在有些手机上一个蓝牙设备都搜索不到,而在其它某些手机却又是正常的,在 6.0 以上正常在 4.4 不正常诸如此类的问题,所以上全球最大的同性交友网站 Gayhub 找一些第三方库想必是极好的。

FastBLE https://github.com/Jasonchenlijian/FastBle
Android Bluetooth Low Energy 蓝牙快速开发框架。 使用简单的方式进行搜索、连接、读写、通知的订阅与取消等一系列蓝牙操作,并实时地得到操作反馈。
这个库作者更新的很频繁,不过 Issues 也很多,这也是我项目用到的库

BluetoothHelper https://github.com/a-voyager/BluetoothHelper
看起来使用也很简单,搜索和发送接收数据都有

Android-BluetoothSPPLibrary https://github.com/akexorcist/Android-BluetoothSPPLibrary
这个就厉害了,连搜索界面都有了,不用自己写界面 ListView 和 Adapter 这些了。

Android-Scanner-Compat-Library https://github.com/NordicSemiconductor/Android-Scanner-Compat-Library
Nordic 官方的库

如果是与 Nordic 的芯片通讯,那么可以用官方提供的一些列工具:

Android-nRF-UART https://github.com/NordicSemiconductor/Android-nRF-UART

主要的功能都在 UartService 这个类的,绑定了这个服务后,会有一个该类的实例,提供 writeRXCharacteristic 方法,这样就很简单的发送数据到智能设备中。接收数据很简单,注册一个 BroadcastReceiver 监听 UartService 发送的广播即可。

ACTION_GATT_CONNECTED 已连接
ACTION_GATT_DISCONNECTED 已断开
ACTION_GATT_SERVICES_DISCOVERED Service 已经发现
ACTION_DATA_AVAILABLE 数据可用
EXTRA_DATA 数据
DEVICE_DOES_NOT_SUPPORT_UART 设备不支持UART

你可能感兴趣的:(Android 5 以上版本的低功耗蓝牙(BLE)通讯)