详解蓝牙BluetoothGattCallback用法之BLE数据接收

详解蓝牙BluetoothGattCallback用法之BLE数据接收

这篇继续讲解数据接收,想要接收到数据必须先要使能通知

@Override
    public void onServicesDiscovered(BluetoothGatt gatt, int status) {//发现服务,在蓝牙连接的时候会调用
        List<BluetoothGattService> list = mBluetoothGatt.getServices();
        for (BluetoothGattService bluetoothGattService:list){
            String str = bluetoothGattService.getUuid().toString();
            Log.e("onServicesDisc中中中", " :" + str);
            List<BluetoothGattCharacteristic> gattCharacteristics = bluetoothGattService
                    .getCharacteristics();
            for (BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics) {
                Log.e("onServicesDisc中中中", " :" + gattCharacteristic.getUuid());
                if("0000ffe1-0000-1000-8000-00805f9b34fb".equals(gattCharacteristic.getUuid().toString())){
                    linkLossService=bluetoothGattService;
                    alertLevel=gattCharacteristic;
                    Log.e("daole",alertLevel.getUuid().toString());
                }
            }

        }
        enableNotification(true,gatt,alertLevel);//必须要有,否则接收不到数据
        //Log.e("onServicesDisc中中中", " :" + mBluetoothGatt.getServices().toString());
    }

就是 {enableNotification(true,gatt,alertLevel);//必须要有,否则接收不到数据} 这句话,这个必须要有不然接收数据的那个回调函数会毫无反应,不要问为什么,程序主要还是测试,都是泪,为了做一个工具用了好久。

    private void enableNotification(boolean enable, BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
    if (gatt == null || characteristic == null)
        return; //这一步必须要有 否则收不到通知 
    gatt.setCharacteristicNotification(characteristic, enable);
}

这些都做完了以后,在发送了指令后,如果有数据返回,就会接收到数据

        @Override
    public void onCharacteristicChanged(BluetoothGatt gatt,
                                        BluetoothGattCharacteristic characteristic) {// Characteristic 改变,数据接收会调用
        Log.e("CharacteristicChanged中", "数据接收了哦"+bytesToHexString(characteristic.getValue()));
        tx_receive.append(bytesToHexString(characteristic.getValue()) + "\n");
    }

tx_receive.append(bytesToHexString(characteristic.getValue()) + “\n”);这个是将接收的数据在textview中显示出来。append是追加显示,有的手机可能不能在第一时间显示出数据,那么你就滑动一下listview啥的,数据就会显示了。

数据写入状态

        @Override
    public void onCharacteristicWrite(BluetoothGatt gatt,
                                      BluetoothGattCharacteristic characteristic, int status) {//发送数据时调用
        Log.e("onCharacteristicWrite中", "数据发送了哦");
        Log.e("onCharacteristicWrite中", bytesToHexString(characteristic.getValue()));
        if(status == BluetoothGatt.GATT_SUCCESS){//写入成功
            Log.e("onCharacteristicWrite中", "写入成功");
            tx_display.append("写入成功");
        }else if (status == BluetoothGatt.GATT_FAILURE){
            Log.e("onCharacteristicWrite中", "写入失败");
        }else if (status == BluetoothGatt.GATT_WRITE_NOT_PERMITTED){
            Log.e("onCharacteristicWrite中", "没权限");
        }

    }

这个是显示写入状态的回调函数,写入成功后就会显示的,这个
boolean status = mBluetoothGatt.writeCharacteristic(alertLevel);
也可以显示写入成功没有。
关于数据接收与发送的我已经写完了,我所有的地方都没有用到广播和服务,使用我的代码的时候一定要注意。
如果有什么更好的想法,本人能力也有限,如有错误,也欢迎指正。
源码(http://download.csdn.net/download/uu13567/9983668

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值