Ne peut pas lire caractéristique. Android BLE
Je voudrais lire les données à partir d'une caractéristique spécifique de ma télécommande BLE appareil pour ma tablette Android Nexus 7.
Le problème est que, je peux recevoir les données par l'activation de la notification de cette caractéristique, même sans faire appel readCharacteristic
. Mais je ne peux pas réussir à lire la caractéristique en appelant readCharacteristic
sans l'activation de la notification.
mBluetoothGatt.readCharacteristic(characteristic)
renvoie la valeur false. Ainsi, la fonction onCharacteristicRead
n'a jamais été déclenché. J'ai aussi vérifié la valeur de la propriété BluetoothGattCharacteristic.PROPERTY_READ
, il est de 30.
Quelqu'un a quelques idées sur ce qui se passe ici? J'ai vraiment besoin de lire la caractéristique séparément. Parce que si je ne l'analyse des données basées sur la notification, je ne peut pas savoir où les données commence. C'est parce que mon appareil enverra 12bytes à chaque fois. Et il continuera d'envoyer le tableau d'octets. Cependant, la notification m'apporterait les données d'un octet d'un moment. Donc je ne sais pas qui est le premier octet du tableau d'octets.
Je suis à l'aide de l'exemple de code fourni par Android dès maintenant.
Voici l'extrait:
public void readCharacteristic(BluetoothGattCharacteristic characteristic) {
if (mBluetoothAdapter == null || mBluetoothGatt == null) {
Log.w(TAG, "BluetoothAdapter not initialized");
return;
}
boolean status = mBluetoothGatt.readCharacteristic(characteristic);
System.out.println("Initialize reading process status:" + status);
}
public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic,
boolean enabled) {
if (mBluetoothAdapter == null || mBluetoothGatt == null) {
Log.w(TAG, "BluetoothAdapter not initialized");
return;
}
mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
//This is specific to Heart Rate Measurement.
if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid())) {
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(descriptor);
}
}
Le code dans la fonction de rappel est:
@Override
public void onCharacteristicRead(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic,
int status) {
System.out.println("In onCharacteristicRead!!!!!!!");
if (status == BluetoothGatt.GATT_SUCCESS) {
broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
System.out.println("Received Data Success!!!!!!");
}
}
J'ai lu attentivement le document de la lecture de caractéristique, mais rien n'y fait. Quelqu'un peut-il m'aider? Merci beaucoup!
OriginalL'auteur Magic | 2014-03-26
Vous devez vous connecter pour publier un commentaire.
vous devez d'abord activer les notifications pour le caractère et puis essayez de lire sa valeur et n'oubliez pas d'obtenir l'approprié au format du tableau d'octets que le retour caractéristique.getValue() la méthode. Ce qui concerne
vous pouvez également essayer d'obtenir la caractéristique des autorisations, afin de vérifier si votre caractère est lisible, si cela ne fonctionne pas c'est peut-être quelque chose d'autre, ou essayer de lire la valeur entre le bloc try/catch pour voir si déclenche une exception. espérons aider
Avez-vous écrit ce setNotification comme Descripteur ?
OriginalL'auteur J Sanchez