继续阅读Android中的BLE值

时间:2016-06-16 01:58:01

标签: android android-bluetooth bluetooth-lowenergy

我正在尝试与Android设备中的BLE进行交互并读取一些传感器值,我正在遵循API级别> 21.我设法扫描设备并连接到它。第一个挑战是一次性读取所有特征值,一些建议使用优先级队列来做到这一点,我实施得很明智,它工作正常。

BluetoothGattCallback gattCallBack = new BluetoothGattCallback() {
        @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        switch (newState) {
            case BluetoothProfile.STATE_CONNECTED:
                Log.d(TAG, "STATE_CONNECTED");
                bluetoothGatt.discoverServices();
                break;
            case BluetoothProfile.STATE_DISCONNECTED:
                Log.d(TAG, "STATE_DISCONNECTED");
                break;
            default:
                Log.d(TAG, "STATE_OTHER");

        }
    }

    @Override
    public void onServicesDiscovered(BluetoothGatt gatt, int status) {
        final List<BluetoothGattService> services = gatt.getServices();
        characteristics = new ArrayList<BluetoothGattCharacteristic>();
        characteristics.add(services.get(1).getCharacteristics().get(0));
        characteristics.add(services.get(1).getCharacteristics().get(1));
        characteristics.add(services.get(1).getCharacteristics().get(2));

        characteristics.add(services.get(2).getCharacteristics().get(0));
        characteristics.add(services.get(2).getCharacteristics().get(1));
        characteristics.add(services.get(2).getCharacteristics().get(2));

        characteristics.add(services.get(3).getCharacteristics().get(0));
        characteristics.add(services.get(3).getCharacteristics().get(1));
        characteristics.add(services.get(3).getCharacteristics().get(2));
        requesReadCharacteristics(gatt);
    }

    public void requesReadCharacteristics(BluetoothGatt gatt) {
        gatt.readCharacteristic(characteristics.get(characteristics.size() - 1));
    }

    @Override
    public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
        if (status == 0 ) {
            Log.d(TAG, "DeviceNameFetchFromDevice: " + characteristic.getValue());
            characteristics.remove(characteristics.get(characteristics.size() - 1));

            if (characteristics.size() > 0) {
                requesReadCharacteristics(gatt);
            } else {
                gatt.disconnect();
            }
        }
    }

    @Override
    public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
        super.onCharacteristicWrite(gatt, characteristic, status);
    }
};

现在我需要通过BLE设备连续监控读取传感器值(每个间隔10秒),所以我需要重复读取特征值并获取它们的值。但是第一次调用后,ble不允许调用“readCharacteristic”。

现在我实现了它,就像定期调用connectDevice(BluetoothDevice)一样,就像断开与BLE设备的现有连接并再次连接它一样。有什么方法我们可以调用readCharacteristic重复连接到设备。根据我的理解,断开和连接设备并不是那么有效。请让我知道,如果有任何这样的例子

,继续阅读设备的正确方法是什么,或者分享

https://github.com/sandeeptengale/androidble/

1 个答案:

答案 0 :(得分:1)

首先,你应该打开通知:

mBluetoothLeService.setCharacteristicNotification(characteristic, true);

然后,当数据发生变化时,您可以读取此方法中的值:

onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic)