Android BLE蓝牙开发中读取数据时设置Notify的方法

项目又增加了一个功能,需要app能够实时监测到按钮的变化。

我就参照之前的电量获取方法,直接获取。

之前的电量获取方式

先获取服务

bluetoothGattService = bluetoothGatt.getService(UUID.fromString(SERVICE_UUID));

然后获取Characteristic

characteristic3 = bluetoothGattService.getCharacteristic(UUID.fromString(CHARACTERISTIC_UUID3));

由于在获取后不能马上读数据,所以我写了个线程,让其延迟一下再获取硬件发送的值。(这是一个大坑,一定要注意!)

new Thread(new Runnable() {
    @Override
    public void run() {
        try{
            Thread.sleep(1500);
            bluetoothGatt.readCharacteristic(characteristic3);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}).start();

但是这样之后我就发现了一个问题,如果连接上之后,只可以获取一次按钮当前的状态值。当我按下按钮的时候,蓝牙模块就会自动断开连接,然后就是各种改。但是一直都是这样的情况,怀疑是蓝牙模块的问题,就用nRF-Connect进行了测试,发现没有问题,然后也发现了再获取数据的时候需要先有一个Notification的操作。

我就去查资料,最终终于查到了关于Notification的使用方法

if(bluetoothGatt.setCharacteristicNotification(characteristic2, true)){
    //获取到Notify当中的Descriptor通道 然后再进行注册
    BluetoothGattDescriptor clientConfig = characteristic2 .getDescriptor(UUID.fromString(DESCRIPTOR_UUID));
    clientConfig.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
    bluetoothGatt.writeDescriptor(clientConfig);
}

这样给按钮的characteristic设置Notify后再通过bluetoothGatt.readCharacteristic()方法读取数据,就可以了。

附上参考文章链接https://www.jianshu.com/p/31db2569bf11

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值