打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
BLE的Android上位机开发(下)
ELLO! 大家好!马上就更新下篇了呢~哈哈!(上篇的地址:BLE的Android上位机开发(上))废话不多说了,先上主角吧!代码如下!
[Java] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
private void setBleServiceListener() {
//Ble服务发现回调
mBleService.setOnServicesDiscoveredListener(new BleService.OnServicesDiscoveredListener() {
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
List<BluetoothGattService> gattServiceList = gatt.getServices();
}
}
});
//Ble扫描回调
mBleService.setOnLeScanListener(new BleService.OnLeScanListener() {
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
//每当扫描到一个Ble设备时就会返回,(扫描结果重复的库中已处理)
Log.w("-","->>扫描到设备:"+device.getName()+">>"+device.getAddress()+">>"+rssi);
}
});
//Ble连接回调
mBleService.setOnConnectListener(new BleService.OnConnectionStateChangeListener() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
//
}
});
//Ble数据回调
mBleService.setOnDataAvailableListener(new BleService.OnDataAvailableListener() {
@Override
public void onCharacteristicChanged(BluetoothGatt _gatt, final BluetoothGattCharacteristic characteristic) {
//处理通知返回的数据
});
}
为了便于理解,这几个我分开解释一下吧:
1、mBleService.setOnLeScanListener
这个的作用是,每当Android扫描到一个新的BLE设备,便会触发这个listener。扫描结果重复的库中已处理,这一部分是Blelib里面已经处理好了的,很方便的!
可以通过device.getName()来显示设备名。这个跟gatt_db.h里面CHARACTERISTIC(char_device_name的字段值是一样的哦~
连接这个设备,使用函数:mBleService.connect(device.getAddress());就好了!
2、mBleService.setOnConnectListener
这个回调函数在connect操作之后才会被调用,这里的参数newState,主要有几种类型(灰常重要):
STATE_CONNECTED 设备已经连接
STATE_CONNECTING 设备正在连接到android
STATE_DISCONNECTED 设备已经断开连接
STATE_DISCONNECTING 设备正在断开连接
这个newState的判断还是很准确的,已经测试过了,就是反应时间不是很快。。我把41Z复位之后,这个大约需要四五秒的样子才能反应过来。。  不过可以借助这个作断线重连,很不错!
3、mBleService.setOnServicesDiscoveredListener
在设备STATE_CONNECTED 之后,就可以触发ServicesDiscoveredListener了。BLE设备的所有可见services都在gattServiceList 里面,可以通过 service.getUuid()取出每个service的uuid
每个service里面的characteristic可以用service.getCharacteristics();取出,这样就能为每个characteristic执行read write notify操作了。如果我们在41Z里面设置了SendNotification,比如41Z默认的电量,那么当android接收到这个Notification时,就会触发下面要说到的。
4、mBleService.setOnDataAvailableListener
这里重写了onCharacteristicChanged函数,当Notification到达时,就会进入这个onCharacteristicChanged函数。函数里characteristic参数即是对应由哪个characteristic发来的通知,读取这个值的操作是characteristic.getIntValue
最后,附一张手机APP的截图吧~大家不要笑话我哈~~
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
android BLE蓝牙开发
关于Android 5.x的低功耗蓝牙BLE开发简介
Android BLE与终端通信(五)——Google API BLE4
Android 与BLE设备通讯
蓝牙BLE协议分析【附代码实例】
BLE简介和Android BLE编程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服