Je suis en train de suivre Android's BLE apis en essayant de connecter à un périphérique une donnée lue. La numérisation, la connexion et la lecture sont correctes mais le problème est qu'après 30 secondes exactement, la connexion tombe - seulement pour se reconnecter momentanément (< 10 sec). Voici mon code pour la connexion au serveur du GATT de l'appareil:Le périphérique Android BLE se déconnecte et se reconnecte continuellement toutes les 30 secondes
protected BluetoothGatt initGattServer(BluetoothDevice device, final ConnectionCallback callback, final DataCallback dataCallback) {
Log.d("INIT GATT SERVER", device.getName());
this.gatt = device.connectGatt(context, true, new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState){
Log.d("GATT CONNECTION", "CHANGED -- status: " + status + " newState: " + newState);
if(callback != null){
callback.onConnectionStateChanged(newState);
}
gattConnectionState = newState;
if(status == BluetoothGatt.GATT_SUCCESS){
if(newState == BluetoothProfile.STATE_CONNECTED){
gatt.discoverServices();
}
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status){
gattServices.clear();
gattServices.addAll(gatt.getServices());
callback.onServicesDiscovered(gatt);
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status){
handleCharacteristicChanged(characteristic, status, dataCallback);
}
@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status){
handleCharacteristicChanged(characteristic, status, dataCallback);
}
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic){
handleCharacteristicChanged(characteristic, BluetoothGatt.GATT_SUCCESS, dataCallback);
}
});
refreshDeviceCache(gatt);
return this.gatt;
}
La question est que je reçois des callbacks inattendues à onConnectionStateChange avec BluetoothProfile.STATE_DISCONNECTED, suivi par BluetoothProfile.STATE_CONNECTED. Cette phase de déconnexion-reconnexion se répète pendant la durée du service dans lequel elle s'exécute et la connexion n'est donc pas solide. Le fournisseur de l'appareil auquel j'essaie de me connecter a une application qui maintient sa connexion mais la mienne ne l'est pas. Quelle pourrait être la raison?
À quel périphérique essayez-vous de vous connecter? Peut-être que l'appareil attend une sorte d'écriture, sinon il se déconnecte? – Emil
Un lecteur de diagnostic moteur - destiné à surveiller le compteur kilométrique du véhicule, l'état du moteur et autres. [link] (http://wlius.com/bluelink) – Ron
Il est assez courant que les périphériques BLE implémentent un délai d'inactivité, car ils sont conçus pour durer longtemps avec souvent une batterie de petite capacité. L'exécution d'une caractéristique en lecture ou en écriture peut suffire à maintenir le lien en vie. À quelle fréquence effectuez-vous une lecture? –