你应该同步进行所有操作。因此,在:
bluetoothGatt.readCharacteristic(characteristic);
你应该等回电话
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status)
所以,如果你想做你描述的事情,就做这样的事情:
List<BluetoothGattCharacteristic> characteristics = new ArrayList<>();
boolean isGettingDeviceInformation;
int count = 0;
@Override
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
String value = characteristic.getStringValue(0);
Log.e("TAG", "onCharacteristicRead: " + value + " UUID " + characteristic.getUuid().toString() );
if(isGettingDeviceInformation) {
if(count < characteristics.size()) {
count++;
bluetoothGatt.setCharacteristicNotification(characteristics.get(count), true);
bluetoothGatt.readCharacteristic(characteristics.get(count));
} else {
isGettingDeviceInformation = false;
}
}
}
private void getDeviceInformation() {
BluetoothGattService deviceInfoService = bluetoothGatt.getService(UUIDs.DEVICE_INFORMATION_SERVICE);
BluetoothGattCharacteristic deviceSerialNumber, deviceHardwareRevision, deviceSoftwareRevision;
characteristics = bluetoothGatt.getService(UUIDs.DEVICE_INFORMATION_SERVICE).getCharacteristics();
bluetoothGatt.setCharacteristicNotification(characteristics.get(count), true);
bluetoothGatt.readCharacteristic(characteristics.get(count));
}
更新
不要忘记,在蓝牙中,您的操作可能会消失,所以您可以在循环中堆叠,等待回调。所以为了避免它,你需要在操作时超时,所以如果没有得到回调,你只需取消当前操作,然后可以继续。