Android BLE write Characteristic 方法在 Android 5.0 及更高版本中总是 return false

Androi BLE writeCharacteristics method always return false in Android 5.0 and higher

我正在尝试在 android 设备和带有 BLE 模块的定制板之间交换数据。我在 Android 5.0 及更高版本的设备上使用 characteristicsWrite() 方法时遇到了一些麻烦。在情人版本中,characteristicsWrite() 方法 return 为真,然后在 BleGattCallback

中调用 onCharacteristicsWrite() 回调

写入方法:

private void sendMessageToDevice(String message) {

    byte nullByte = 0x00;
    byte[] temp = message.getBytes();
    byte[] tx = new byte[temp.length + 1];
    tx[tx.length - 1] = nullByte;

    System.arraycopy(temp, 0, tx, 0, temp.length);

    characteristicWrite.setValue(tx);

    boolean writeResult = mBluetoothGatt.writeCharacteristic(characteristicWrite);

    Log.d(LOG_TAG, "writeResult"); //true
}

onCharacteristicsWrite 方法:

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

        Log.d(LOG_TAG, status); // status = 0 - GATT_SUCCESS
    }

但是当我在 android 设备 v 5.0 上执行此代码时,writeCharacteristic() 方法的结果始终为 false,并且未调用 onCharacteristicWrite() 回调。

谁能解释一下如何在 BLE 设备和 Android 5.0+ 之间正确建立连接?也许我需要针对此类设备的一些特定方法。 应用程序在三星和联想智能手机 v5.0+ 上测试。

问题已解决。您只需要在获得 "false" writeCharacteristic 函数的结果后再次调用 discoverServices():

private void sendMessageToDevice(String message) {

        .............

        boolean writeResult = mBluetoothGatt.writeCharacteristic(characteristicWrite);

        if(!writeResult)
           mBluetoothGatt.discoverServices();
}

之后您需要再次调用 writeCharacteristic() 函数,对我来说结果是 "true"。