我有一个与CharacteristicsNotification有关的问题,我在android中跟踪docs并在很多stackoverflow帖子中搜索。 我的所有代码都有效,直到我尝试从我的设备获取数据,当我订阅通知时我得到了这个日志:BluetoothGatt:setCharacteristicNotification() 但我的方法从未打过电话
我的UUID很好,我的服务发送我已经与其他应用程序核对的数据。 我为我的应用启用了位置。
我在Manifest中有这个权限:
uses-permission android:name =“android.permission.BLUETOOTH”android:required =“true”
uses-permission android:name =“android.permission.BLUETOOTH_ADMIN”
uses-permission android:name =“android.permission.ACCESS_COARSE_LOCATION”
我试过3手机都是三星但不同的Android版
我真的不明白发生了什么
这是我的回调:
private final BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
switch (newState) {
case BluetoothProfile.STATE_CONNECTED:
Log.i("gattCallback", "STATE_CONNECTED");
gatt.discoverServices();
break;
case BluetoothProfile.STATE_DISCONNECTED:
Log.e("gattCallback", "STATE_DISCONNECTED");
break;
default:
Log.e("gattCallback", "STATE_OTHER");
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
Log.i("onServicesDiscovered", "connection to service");
BluetoothGattCharacteristic characteristic =
gatt.getService(UUID.fromString("a389d578-6285-4b3d-a9dc-b83a2ba4c095"))
.getCharacteristic(UUID.fromString("9ecbe31b-f77e-4886-a0a8-c416906387e7"));
gatt.readCharacteristic(characteristic);
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805F9B34FB"));
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
descriptor.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
gatt.writeDescriptor(descriptor);
gatt.setCharacteristicNotification(characteristic, true);
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt,
BluetoothGattCharacteristic
characteristic, int status) {
Log.i("onCharacteristicRead", "read");
}
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
Log.i("onCharacteristicChanged", "changement");
}
};
答案 0 :(得分:1)
两个错误:
1
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
descriptor.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
第二个调用会覆盖第一个值。