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 readCharacteristicsans 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