Android 4.3 Bluetooth Bluetooth не вызывается onCharacteristicRead ()

Я установил уведомление в android, он не вызывает метод onCharacteristicRead() ???? Он не входит в функцию. Почему это происходит так?

Любая помощь приветствуется

Запросите решения.

Это мой код:

 private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { if (newState == BluetoothProfile.STATE_CONNECTED) { Log.i(TAG, "Connected to GATT server."); // Attempts to discover services after successful connection. Log.i(TAG, "Attempting to start service discovery:" + mBluetoothGatt.discoverServices()); } else if (newState == BluetoothProfile.STATE_DISCONNECTED) { Log.i(TAG, "Disconnected from GATT server."); } } @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { gattServices = mBluetoothGatt .getService(SampleGattAttributes.SERVICES_UUID); if (gattServices != null) { gattCharacteristics = gattServices .getCharacteristic(SampleGattAttributes.CHARACTERISTIC_UUID); System.out.println("character-->" + gattCharacteristics); } if (gattCharacteristics != null) { System.out.println("Characteristic not null"); System.out.println("Characteristic Properties-->" + gattCharacteristics.getProperties()); mBluetoothGatt.setCharacteristicNotification(gattCharacteristics, true); } } else { Log.w(TAG, "onServicesDiscovered received: " + status); } } @Override public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { System.out.println("in read"); if (status == BluetoothGatt.GATT_SUCCESS) { byte[] data = characteristic.getValue(); System.out.println("reading"); System.out.println(new String(data)); } } @Override public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { // System.out.println("change"); byte[] data = characteristic.getValue(); System.out.println(new String(data)); } }; 

Заранее спасибо!!

Прежде всего onCharacteristicRead будет срабатывать, если вы прочитали характеристику:

  mBluetoothGatt.readCharacteristic(characteristic); 

Чтение характеристики и настройка уведомлений – это две разные вещи. Каков тип вашей характеристики, из которой вы хотите получить данные?

Это:

  • читать
  • поставить в известность
  • указывать

Если он read вы можете прочитать характеристику, используя mBluetoothGatt.readCharacteristic(characteristic); Метод, но если его notify или indicate сначала, вам нужно будет прочитать descriptor характеристики, вызвав:

 mBluetoothGatt.readDescriptor(ccc); 

После его чтения он должен возвращать данные, вызывая onDescriptorRead вызов onDescriptorRead .
Здесь вы можете настроить (подписаться) на символы через уведомление или указание, вызвав:

 mBluetoothGatt.setCharacteristicNotification(characteristic, true) 

Как только он вернется, вам нужно будет снова написать дескриптор (значение уведомления или индикации)

 BluetoothGattDescriptor clientConfig = characteristic.getDescriptor(CCC); clientConfig.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); // or //clientConfig.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE); mBluetoothGatt.writeDescriptor(clientConfig); 

Как только это будет сделано, вы будете получать уведомления об onCharacteristicChanged каждый раз при изменении характеристик.

Вы можете больше узнать о подключении Bluetooth на Android здесь
И о характеристиках Bluetooth здесь