我有一个ios应用程序,我正在与医疗设备进行BLE通信。我正在创建同一个应用程序的Android版本。
在我用于实现与该医疗设备进行BLE通信的Android应用程序中,我编写了以下gatt回调:
private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
super.onConnectionStateChange(gatt, status, newState);
switch (newState) {
case BluetoothProfile.STATE_CONNECTED:
Log.d(TAG, "Connected");
gatt.discoverServices();
break;
case BluetoothProfile.STATE_DISCONNECTED:
Log.d(TAG, "Disconnected");
break;
default:
Log.d(TAG, "State Other");
break;
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
super.onServicesDiscovered(gatt, status);
Log.d(TAG, "onServicesDiscovered");
BluetoothGattCharacteristic mCharacteristic = gatt.getService(SNORECOACH_SERVICE_UUID).getCharacteristic(BODY_MOVEMENT_UUID);
if ( mCharacteristic.getUuid().equals(BODY_MOVEMENT_UUID)) {
Log.d(TAG, "Characteristic Found");
}
mBluetoothGatt.setCharacteristicNotification(mCharacteristic, true);
BluetoothGattDescriptor descriptor = mCharacteristic.getDescriptor(CLIENT_CHARACTERISTIC_CONFIG_UUID);
if (descriptor.getUuid().equals(CLIENT_CHARACTERISTIC_CONFIG_UUID)) {
Log.d(TAG, "Descriptor Found");
}
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(descriptor);
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
super.onCharacteristicRead(gatt, characteristic, status);
Log.d(TAG, "onCharacteristicRead");
}
@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
super.onCharacteristicWrite(gatt, characteristic, status);
Log.d(TAG, "onCharacteristicWrite");
}
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
super.onCharacteristicChanged(gatt, characteristic);
Log.d(TAG, "onCharacteristicChanged");
}
@Override
public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
super.onDescriptorRead(gatt, descriptor, status);
Log.d(TAG, "onDescriptorRead");
}
@Override
public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
super.onDescriptorWrite(gatt, descriptor, status);
Log.d(TAG, "onDescriptorWrite");
}
};
除了onCharacteristicChange回调之外,配对,取消配对,读写特性等所有操作都正常工作。
我在以下链接中尝试了所有可能的选项
1)https://developer.android.com/guide/topics/connectivity/bluetooth-le.html
2)http://www.truiton.com/2015/04/android-bluetooth-low-energy-ble-example/
3)http://toastdroid.com/2014/09/22/android-bluetooth-low-energy-tutorial/
以及更多其他链接。
但onCharacteristicChanged没有被调用。我已经尝试了超过5天,但没有运气。
但是在ios app中,相当于onCharacteristicChanged的回调被正确调用。
我想知道的是 - 任何特定于Android的编码/实现(即任何服务器端实现)我必须在该设备中执行,以便它可以发送特征更改通知,我可以在onCharacteristicChanged回调中接收。 / p>