Handhabung Indikationen anstelle von Benachrichtigungen in Android BLE
Mithilfe der Bluetooth SIG Application Accelerator-code, und es macht einen guten job zu demonstrieren die verschiedenen Konzepte von bluetooth low energy. Jedoch erwähnt nichts über Indikationen im Gegensatz zu Benachrichtigungen. Ich weiß, dass Indikationen werden müssen anerkennen, im Gegensatz zu notifcations, und in dem code, den ich tun würde byte[] val = enabled ? BluetoothGattDescriptor.ENABLE_INDICATION_VALUE : BluetoothGattDescriptor.DISABLE_INDICATION_VALUE;
statt byte[] val = enabled ? BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE : BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE;
, aber gibt es irgendetwas, was ich sonst noch tun müssen? Wie genau lasse ich die server wissen, dass ich erhielt den Hinweis, dass erforderlich ist? Gibt es etwas, was ich brauche, um hinzuzufügen in
@Override
public void onCharacteristicChanged(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic)
{
notification_id++;
Log.d("BleWrapper","notification count = " + notification_id);
//characteristic's value was updated due to enabled notification, lets get this value
//the value itself will be reported to the UI inside getCharacteristicValue
getCharacteristicValue(characteristic);
//also, notify UI that notification are enabled for particular characteristic
mUiCallback.uiGotNotification(mBluetoothGatt, mBluetoothDevice, mBluetoothSelectedService, characteristic);
}
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie beschreiben, ist ausreichend, aber es gibt einen kleinen Fehler.
In der Tat, BLE Indikationen Bedürfnis nach Anerkennung durch die Kunden in der Erwägung, dass die Benachrichtigungen nicht. Jedoch, dies erfolgt völlig hinter den kulissen von Android. Indikationen anerkannt werden, die vom system als Ihr
onCharacteristicChanged
callback aufgerufen wird.Nur mit dem Unterschied, die Sie bereits herausgefunden hat, ist, dass Sie brauchen, um die richtige Flagge in der Client-Eigenschaft Configuration-descriptor auf der BLE-server. Für regelmäßige Benachrichtigungen, Nutzung
ENABLE_NOTIFICATION_VALUE
. Für Indikationen, die VerwendungENABLE_INDICATION_VALUE
. Beachten Sie, dass Sie deaktivieren beide schreibenDISABLE_NOTIFICATION_VALUE
. Das, die du erwähnt hast, existiert nicht, wie in der Dokumentation!DISABLE_INDICATION_VALUE
Auf der Android-Seite, es ist ausreichend, um
BluetoothGatt#setCharacteristicNotification(BluetoothGattCharacteristic Merkmal, boolean enable)
woenable = true
. Dies funktioniert für beide-Benachrichtigungen und Hinweise. In beiden Fällen werden IhreonCharacteristicChanged
Rückruf verwendet werden.(Wahrscheinlich haben Sie schon dachte, dies aus, indem jetzt, aber posten trotzdem, falls jemand hier landet via Google).