Ich versuche, den Wert zu lesen, der in einem BluetoothGattCharacteristic
gespeichert wird. Hier finden Sie meine BluetoothGattCallback
Code, wo die meisten der Aktion stattfindet:Das Lesen von einem BluetoothGattCharacteristic schlägt fehl
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.");
Log.i(TAG, "Getting services....");
gatt.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) {
BluetoothGattService serv = gatt.getService(Constants.MY_UUID);
if (serv != null) {
BluetoothGattCharacteristic characteristic = serv.getCharacteristic(Constants.ANOTHER_UUID);
boolean res = gatt.readCharacteristic(characteristic);
if (res) {
Log.d(TAG, "res was true");
} else {
Log.d(TAG, "res was false");
}
}
} else {
Log.w(TAG, "onServicesDiscovered received: " + status);
}
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic,
int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
Log.d(TAG, "Succesfully read characteristic: " + characteristic.getValue().toString());
} else {
Log.d(TAG, "Characteristic read not successful");
}
}
};
So von der Eigenschaft zu lesen, ich bin versucht, die gatt.readCharacteristic()
Methode zu verwenden, die eine Charakteristik nimmt und gibt einen booleschen eine erfolgreiche anzeigt Operation oder nicht. Hier gibt diese Methode false
(Drucken "res war falsch") zurück und zeigt an, dass es fehlgeschlagen ist.
Es wird keine Fehlermeldung gedruckt. Was ist der richtige Weg, um ein Merkmal zu lesen? Warum würde diese Methode false
zurückgeben?
EDIT: Wie Inferno vorgeschlagen, ging voran und heruntergeladen die benötigten Quellen und legen Sie anschließend einen Haltepunkt in der BluetoothGatt
readCharacteristic()
Methode:
Hier ist die readCharacteristic()
Methode in android-23 .. \ BluetoothGatt
public boolean readCharacteristic(BluetoothGattCharacteristic characteristic) {
if ((characteristic.getProperties() &
BluetoothGattCharacteristic.PROPERTY_READ) == 0) return false;
(characteristic.getProperties() & BluetoothGattCharacteristic.PROPERTY_READ)
0 zurückkehrt, so wird false
sofort zurückgegeben wird. Nun gibt der Debugger characteristic.getProperties()
einen Wert von 8
zurück, während BluetoothGattCharacteristic.PROPERTY_READ
einen statischen int-Wert von 0x02
hat.
Wie ich verstehe, 0x08 & 0x02
== 0. Da die PROPERTY_READ
ist ein hardcoded Wert, nehme ich an, dass etwas mit dem Wert falsch ist, der von characteristic.getProperties()
zurückgegeben wird. Was könnte hier schiefgehen?
Tritt der Callback 'onCharacteristicRead()' auch dann auf, wenn 'gatt.readCharacteristic() '' 'false' zurückgibt? –
Nein, es wird nicht aufgerufen. – Orbit
Ich werde meine Antwort aktualisieren, geben Sie mir eine zweite –