BLE的Android上位机开发(下)

ELLO! 大家好!马上就更新下篇了呢~哈哈!(上篇的地址:BLE的Android上位机开发(上))废话不多说了,先上主角吧!代码如下![Java] 纯文本查看 复制代码?0102030405060708091011121314151617181920212223242526272829303132private void setBleServiceListener() {//Ble服务发现回调mBleService.setOnServicesDiscoveredListener(new BleService.OnServicesDiscoveredListener() {@Overridepublic void onServicesDiscovered(BluetoothGatt gatt, int status) {if (status == BluetoothGatt.GATT_SUCCESS) {List<BluetoothGattService> gattServiceList = gatt.getServices();}}});//Ble扫描回调mBleService.setOnLeScanListener(new BleService.OnLeScanListener() {@Overridepublic void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {//每当扫描到一个Ble设备时就会返回,(扫描结果重复的库中已处理)Log.w("-","->>扫描到设备:"+device.getName()+">>"+device.getAddress()+">>"+rssi);}});//Ble连接回调mBleService.setOnConnectListener(new BleService.OnConnectionStateChangeListener() {@Overridepublic void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {//}});//Ble数据回调mBleService.setOnDataAvailableListener(new BleService.OnDataAvailableListener() {@Overridepublic 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 设备正在连接到androidSTATE_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的截图吧~大家不要笑话我哈~~

(0)

相关推荐

  • Android Kotlin&BLE(低功耗蓝牙) 笔记

    目录 BLE 与经典蓝牙的区别 BLE 的 Kotlin 下实践 经典蓝牙(Classic Bluetooth)& 低功耗蓝牙(Bluetooth Low Energy) 经典蓝牙可以用与数据 ...

  • BLE的Android上位机开发(上)

    各位坛友大家好啊!上篇BLE的Android开发小技巧(见帖:BLE4.0安卓上位机开发小技巧),但因为当时Android上位机还没有完全开发完毕,BleLib开源包也用的不太熟练,因此没有详细的代码 ...

  • 上位机开发必备的一个实体类

    -Begin- 上位机开发过程中,当自己编写通信类库的时候,包含ModbusRTU协议.ModbusTCP协议.各种PLC协议或其他自定义协议,都会涉及到报文的拼接:另外,如果大家做过一些配方管理的项 ...

  • 上位机开发之三菱Q系列PLC通信实践

    上位机开发之三菱Q系列PLC通信实践

  • BLE4.0安卓上位机开发小技巧

    赶着五一假期看了看41Z里面BLE这块的SDK,发现NXP提供的example里面用到的UUID基本都是SIC组织规定的service和characteristic,而且用的传感器数据基本都是随机数 ...

  • 如何使用Python开发串口通讯上位机(完结)

    2021的第一份更新,比以往时候来得早一点! 前面两期讲了如何使用pyserial和做好了基本的上位机界面以及与API的联动,今天我们接着完善下代码. 1 编码规范的使用 前面两期只是做基础展示用,所 ...

  • 如何使用Python开发串口通讯上位机(二)

    黑色的dos窗口对于大部分来说,页面极为不友好,且操作不方便,因此本篇主要讲讲如何结合QtDesigner创建一个UI并初步与串口Api链接. 1 QtDesigner进行上位机页面设计 Python ...

  • 如何使用Python开发串口通讯上位机(一)

    用Python开发串口通讯型上位机,其实并非最优解,本系列更新只为个人学习与总结.如果有C语言底子,嵌入式层面的上位机开发,C++ Builder,C#才是更加好用的利器. 1 什么是上位机 从事过嵌 ...

  • 郑州地铁8号线进展喜人,又有一个区间盾构机吊装下井

    郑州讯    日前,由中国水电十四局承建的郑州轨道8号线01标03工区项目轻工业大学站,左线盾构机顺利吊装下井.3#(海瑞克S-1196)盾构机在轻工业大学站-西四环站区间左线顺利吊装下井,标志着轻工 ...

  • 郑州地铁8号线又有新进展!郑银区间右线盾构机顺利下井

    郑州讯   近日,郑州地铁8号线项目郑州大学站-银屏路站区间右线"昆仑38号"盾构机台车顺利下井组装. "昆仑38号"盾构机总长95米,重量达477.8吨,开挖 ...