Je travaille sur la mise en œuvre d' une application Android qui se connecte à des appareils BLE , mais le manque de documentation me tue. Rien ne semble fonctionner de la même façon deux fois si je lance l'application une fois qu'il pourrait fonctionner , mais la prochaine fois arrête quelque part (aucune idée) mais je un peu venu à la conclusion que je pourrais avoir pas utilisé disconnect()
et close()
dans le bon ordre.
Après disons une déconnexion I erreur d'appel () d'abord:
public void disconnect() {
mScanning = true;
mConnected = false;
startedConnect = false;
if (mBluetoothAdapter == null || mBluetoothGatt == null) {
scanLeDevice(true);
return;
}
mBluetoothGatt.disconnect();
scanLeDevice(true);
}
j'appelle close ():
public void close() {
if (mBluetoothGatt == null) {
return;
}
mBluetoothGatt.close();
mBluetoothGatt = null;
}
Est - ce la bonne façon de le faire ou faux? S'il vous plaît être conscient que je fais appel scanLeDevice(true);
juste après la déconnexion mais close()
est appelé que je pense est juste « de finition » tout et arrête le droit de balayage?
Lorsque vous créez un BluetoothGatt
objet en appelant connectGatt
un BluetoothDevice
, vous prétendez l' un des 32 (dans la version actuelle Android) emplacements disponibles dans la pile Bluetooth.
Sur cet objet , vous pouvez maintenant appeler connect
et disconnect
de changer l'état du « but » si Android devrait essayer de garder une connexion à l'appareil ou non. Jusqu'à ce que vous appelez disconnect
, Android sera ( pour toujours) essayer de se connecter à l'appareil et se reconnecter automatiquement à l'appareil si la connexion tombe pour une raison quelconque. L' appel à connect
nouveau après disconnect
il sera essayer de vous connecter à nouveau.
Note: la mise autoConnect
à false
la première connectGatt
appel fixera un délai d' attente initial pour la première connexion tentative implicite (généralement 30 secondes), et si l'appareil se connecte et la connexion des gouttes plus tard, il essaiera pas automatiquement de se reconnecter.
Ainsi , l' BluetoothGatt
objet peut être dans l'état « déconnecté » , mais encore prendre jusqu'à un des 32 emplacements dans la pile Bluetooth. Lorsque vous appelez close
, vous relâchez toutes les ressources de l' BluetoothGatt
objet et revenir à l'emplacement de la pile Bluetooth. Un gros signifie donc implicitement également la déconnexion. Pour contourner potentiellement certains appareils Android bogué, vous pouvez appeler disconnect
sur l' BluetoothGatt
objet avant close
. Notez qu'une fois que vous avez appelé close
, vous ne pouvez pas appeler d'autres méthodes sur cet BluetoothGatt
objet.
Remarque: la désactivation des moyens Bluetooth détruire tous BluetoothGatt
automatiquement des objets.
Retour à votre question, je ne comprends pas vraiment ce que votre analyse BLE doit faire avec connexion / déconnexion / fermeture. La numérisation est totalement séparé des connexions et des BluetoothGatt
objets et il n'y a aucun problème d'être connecté et effectuer une analyse en même temps. Pour arrêter l'analyse, appel stopScan
à la BluetoothLeScanner
.