一、写在前面的话
- 一直想写一篇关于蓝牙与ble设备通讯的博客,但是一直也不知道从何下手,可能是之前思路不清晰吧,也就一直拖拖拖,拖到现在。最近又做到关于ble设备的项目了,在此总结一下吧。(如有不到位或者不太对的地方,希望各位多多指教)
二、基础
-
蓝牙是一种短距的无线通讯技术,可实现固定设备、移动设备之间的数据交换。一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,而将蓝牙4.0规范下的BLE蓝牙称为低功耗蓝牙。
-
如图:
-
BLE是Bluetooth low energy的意思,属于蓝牙低功耗协议,Android4.3以上及苹果手机等现在都支持蓝牙BLE,主要面向传感器应用市场,进行短时间小数据传输,如健康领域:手机监测血压,体育:手机计步器等。
-
低功耗蓝牙通讯协议:
三、梳理整体逻辑(思路/步骤)
- 权限问题:先判断手机是否满足android4.3以上版本,再判断手机是否开启蓝牙。
- 搜索蓝牙:搜索蓝牙,回调接口中查看ble设备相关信息,一定时间停止扫描。
- 连接蓝牙:首先获取到ble设备的mac地址,然后调用connect()方法进行连接。
- 获取特征:蓝牙连接成功后,需要获取蓝牙的服务特征等,然后开启接收设置。
- 发送消息:writeCharacteristic()方法,发送数据给ble设备。
- 接收消息:通过蓝牙的回调接口中onCharacteristicRead()方法,接收蓝牙收的消息。
- 释放资源:断开连接,关闭资源。
四、具体实现
1、权限问题
step1、在AndroidManifest.xml中声明权限
<!-- 蓝牙所需权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
-
第一个权限是允许程序连接到已配对的蓝牙设备。
-
第二个权限是允许程序发现和配对蓝牙设备。
-
因为只有在API18(Android4.3)以上的手机才支持ble开发,所以还要声明一个feature。
<uses-feature
android:name="android.hardware.bluetooth_le"
android:required="true" />
-
required为true时,应用只能在支持BLE的Android设备上安装运行
-
required为false时,Android设备均可正常安装运行,需要在代码运行时判断设备是否支持BLE。
-
**注意:**还得写上定位权限,要不然有的机型扫描不到ble设备。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
step2、获取蓝牙适配器
BluetoothManager mBluetoothManager =(BluetoothManager