Je développe une application dans laquelle je peux à la fois trouver et configurer des périphériques BLE. J'utilise l'API standard Android BLE, mais récemment j'ai rencontré des problèmes étranges.Android arrête de trouver des périphériques BLE: onClientRegistered() - status = 133 clientIf = 0
Lorsque j'allume mon application, le scan BLE fonctionne correctement. Je numérisation à l'aide:
mBluetoothAdapter.startLeScan(mLeScanCallback); // for Kitkat and below
et
mBluetoothAdapter.getBluetoothLeScanner().startScan(mScanCallback); // for Lollipop and above
Dans le Logcat Je reçois des messages suivants (je suppose que cela est important pour cette question):
D/BluetoothAdapter: onClientRegistered() - status=0 clientIf=5
Dans mon application I peut également lire certaines caractéristiques de mes appareils BLE (par exemple l'état de la batterie). Je me connecte à un périphérique pour lire cette caractéristique dans un fragment séparé en utilisant:
mBluetoothManager = (BluetoothManager) mContext.getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = mBluetoothManager.getAdapter();
mBluetoothDevice = mBluetoothAdapter.getRemoteDevice(mMacAddress);
mBluetoothGatt = mBluetoothDevice.connectGatt(mContext, false, mGattCallback);
Les caractéristiques sont lues correctement. Dans le rappel onCharacteristicRead
je déconnecte également tout près Gatt:
mBluetoothGatt.disconnect();
mBluetoothGatt.close();
Chaque fois ouvrir un fragment de lire une caractéristique (peu importe que ce soit le même dispositif ou non) clientIf
valeur augmente. Je peux voir dans le LogCat:
D/BluetoothGatt: onClientRegistered() - status=0 clientIf=6
D/BluetoothGatt: onClientRegistered() - status=0 clientIf=7
D/BluetoothGatt: onClientRegistered() - status=0 clientIf=8
D/BluetoothGatt: onClientRegistered() - status=0 clientIf=9
D/BluetoothGatt: onClientRegistered() - status=0 clientIf=10
Tout fonctionne bien jusqu'à ce que la valeur est égale à 10. clientIf
analyse BLE cesse de trouver tous les périphériques, je ne peux pas se connecter à l'un de mes appareils de lecture des caractéristiques, etc. Et le LogCat infiniment affiche ces messages:
D/BluetoothGatt: unregisterApp() - mClientIf=0
D/BluetoothGatt: onClientRegistered() - status=133 clientIf=0
la seule façon de résoudre ce problème est de tuer l'application et relancer ou redémarrer Bluetooth en l'éteignant et manuellement. J'ai rencontré ce problème uniquement sur certains appareils tels que Xperia Z1 (Android KitKat) et Galaxy S4 (Android Lollipop). Je ne pouvais pas reproduire ce problème sur Xperia Z3 Compact exécutant Android Marshmallow ...
Y at-il quelque chose que je peux faire à ce sujet? J'ai déjà essayé plusieurs "solutions" telles que - appeler toutes les méthodes BLE du thread UI et fermer/déconnecter le GATT, mais rien n'y fait. Comment puis-je le réparer?
J'ai eu un problème similaire et pour moi d'ajouter un peu de retard entre déconnexion et numérisez résolu le problème aussi. Merci! – Tijn
J'ai découvert la même solution que vous. Détails: https://github.com/googlesamples/android-BluetoothLeGatt/issues/44 –