gpt4 book ai didi

Android BluetoothGatt setCharacteristicNotification 只设置第一个特征

转载 作者:太空狗 更新时间:2023-10-29 16:01:34 28 4
gpt4 key购买 nike

我一直无法通过同一个蓝牙 LE 设备同时使用两个不同的特性。它只记录第一个特征而不记录第二个特征。如果我调换它们,它仍然会记录第一个,但不会记录第二个。第一和第二特征都需要注册和接收。如果有帮助,我正在使用运行 4.4.2 的三星 Galaxy S4。

这是调用 setCharacteristicNotification() 的代码部分

if (mBluetoothBeaconGatt != null && mBluetoothBeaconGatt.getService(UUID_CUSTOM_SERVICE) != null) {

characteristicBracelet = mBluetoothBeaconGatt.getService(UUID_CUSTOM_SERVICE)
.getCharacteristic(UUID_CUSTOM_BRACELET);

characteristicBeacon = mBluetoothBeaconGatt.getService(UUID_CUSTOM_SERVICE)
.getCharacteristic(UUID_CUSTOM_BEACON);

if(characteristicBracelet != null) {
Log.i(TAG, "Init Bracelet Characteristics");
this.setCharacteristicNotification(characteristicBracelet,
true);
}
if(characteristicBeacon != null) {
Log.i(TAG, "Init Beacon Characteristics");
this.setCharacteristicNotification(characteristicBeacon, true);
}
}

设置特征通知

if (UUID_CUSTOM_BEACON.equals(characteristic.getUuid())) {
if (mBluetoothBeaconGatt != null) {
Log.i(TAG, "Enabling indication for beacon");
mBluetoothBeaconGatt.setCharacteristicNotification(characteristic, enabled);
BluetoothGattDescriptor descriptor = characteristic
.getDescriptor(UUID
.fromString(CustomGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
descriptor
.setValue((enabled) ? BluetoothGattDescriptor.ENABLE_INDICATION_VALUE
: BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE);
mBluetoothBeaconGatt.writeDescriptor(descriptor);
}
} else if (UUID_CUSTOM_BRACELET.equals(characteristic.getUuid())) {
if (mBluetoothBraceletGatt != null || mBluetoothBeaconGatt != null) {
BluetoothGatt gatt = (mBluetoothBeaconGatt != null) ? mBluetoothBeaconGatt : mBluetoothBraceletGatt;
gatt.setCharacteristicNotification(characteristic, enabled);
BluetoothGattDescriptor descriptor = characteristic
.getDescriptor(UUID
.fromString(CustomGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
descriptor
.setValue((enabled) ? BluetoothGattDescriptor.ENABLE_INDICATION_VALUE
: BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE);
gatt.writeDescriptor(descriptor);
}
}

接受测试以查看它们是否为空的变量会验证它们是否为非空。

如果您需要其他信息或这是重复的,请告诉我。

感谢您花时间提供帮助。

最佳答案

您不能同时执行多个蓝牙操作。获得 onDescriptorWrite 后,您可以启用/禁用下一个特征:

private int index;
private boolean enabled;

private BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
@Override
public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
index++;
setNotification();
}
}

public void notify(boolean enabled){
index = 0;
this.enabled = enabled;
setNotification();
}

private void setNotification(){
BluetoothGattCharacteristic characteristic;
switch(index){
case 0:
characteristic = mBluetoothGatt.getService(MY_SERVICE_UUID)
.getCharacteristic(UUID_CUSTOM_BRACELET);
break;
case 1:
characteristic = mBluetoothGatt.getService(MY_SERVICE_UUID)
.getCharacteristic(UUID_CUSTOM_BEACON);
break;
default:
return;
}
mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(CLIENT_CHARACTERISTIC_CONFIG);
descriptor.setValue((enabled) ? BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE
: BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(desc);
}

来自 NewCircle 的精彩教程:https://newcircle.com/s/post/1553/bluetooth_smart_le_android_tutorial

关于Android BluetoothGatt setCharacteristicNotification 只设置第一个特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30334246/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com