0

J'ai un périphérique BLE qui fonctionne correctement avec un UUID Service/Caractéristique donné sur iOS et Android 7.0. Sur Android 6.0 Marshmallow, la méthode onCharacteristicChanged ne se déclenchera pas malgré la définition de ENABLE_NOTIFICATION_VALUE sur le descripteur. S'il vous plaît aidez-moi à comprendre comment faire fonctionner le onCharacteristicChanged pour un appareil Android fonctionnant sous Android OS 6.0 Marshmallow. Voici le code que je utilise pour essayer d'obtenir des notifications au travail:Android BLE: écriture réussie de la valeur ENABLE_NOTIFICATION_VALUE sur BluetoothGattDescriptor mais onCharacteristicChanged ne se déclenche jamais

boolean success = mBluetoothGatt.setCharacteristicNotification(characteristic, true); 
    Log.e(TAG, "set char notification = " + (success ? "It worked :)" : "It did not work :(")); 

    if (UUID_DATA_PACKET.equals(characteristic.getUuid())) { 
     BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
       UUID.fromString(EkoCoreGattAttributes.CLIENT_CHARACTERISTIC_CONFIG)); 

     descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); 

     success = mBluetoothGatt.writeDescriptor(descriptor); 
     Log.e(TAG, "set descriptor = " + descriptor.getCharacteristic().getWriteType() + ", success = " + (success ? "It worked :)" : "It did not work :(")); 
    } 

Dans le code ci-dessus à la fois la setCharacteristicNotification et appelle writeDescriptor matcher (1/vrai/etc). De plus, le rappel onDescriptorWrite renvoie GATT_SUCCESS. Toutefois, lorsque nous lisons le descripteur à un point ultérieur du code, la valeur de notification est toujours définie sur désactivé. Nous avons essayé de nombreuses solutions, comme mettre un délai entre les appels setCharacteristicNotification et writeDescriptor, mais nous n'avons pas trouvé de solution à ce problème. L'association avec le périphérique en question ne pose aucun problème, mais l'obtention des notifications semble impossible. Des conseils seraient appréciés.

Répondre

0

Ajouter ce qui suit avant d'écrire le descripteur fixe mon problème:

characteristic.setWriteType(BluetoothGattCharacteristic.WRIT‌​E_TYPE_DEFAULT); 

De toute évidence il y a un bug dans Android 6. J'espère que cette réponse aide quelqu'un d'autre. C'était tout à fait le mal de tête à trouver.