2017-09-22 2 views
0

J'ai écrit une application simple pour pouvoir écrire sur une caractéristique spécifique. J'ai basé mon application sur google example - https://github.com/googlesamples/android-BluetoothLeGatt. J'ai ajouté des boutons qui lors de la connexion donne la possibilité d'écrire sur une caractéristique spécifique un octet.Android - le module BLE est plus occupé après quelques secondes de connexion

Maintenant, ce que j'ai remarqué, c'est qu'après une connexion de quelques secondes (toujours moins de 5) cela fonctionne très bien, mais alors la fonction writeCharacteristic (https://developer.android.com/reference/android/bluetooth/BluetoothGatt.html#writeCharacteristic(android.bluetooth.BluetoothGattCharacteristic)) commence à retourner false. J'ai débogué et il s'avère que l'appareil est occupé. Je suis en mesure d'appeler avec succès writeCharacteristic toutes les 1,5 seconde qui, par rapport à aucun retard dans les premières secondes de connexion est très lent.

Voici mon extrait avec fonction onClick:

public void onClick(View v) { 
    byte value[] = {0}; 
    switch (v.getId()) { 

     case R.id.button1: 
      value[0] = 1; 
      mBulbCharacteristic.setValue(value); 
      mBluetoothLeService.writeCharacteristic(mBulbCharacteristic); 
      break; 

     case R.id.button2: 
      value[0] = 2; 
      mBulbCharacteristic.setValue(value); 
      mBluetoothLeService.writeCharacteristic(mBulbCharacteristic); 
      break; 

     case R.id.button3: 
      value[0] = 3; 
      mBulbCharacteristic.setValue(value); 
      mBluetoothLeService.writeCharacteristic(mBulbCharacteristic); 
      break; 

     default: 
      break; 
    } 

} 

Répondre

1

que le dispositif est « occupé » ne signifie pas simplement qu'une réponse est en attente. L'API d'Android nécessite que vous attendiez le rappel correspondant (comme onCharacteristicWrite pour les écritures) après avoir émis une nouvelle requête. Si vous pensez que cela prend trop de temps, vous pouvez réduire l'intervalle de connexion.

+0

En fait, je me suis trouvé que l'intervalle de connexion était élevé. Probablement pour les premières secondes, il était inférieur à cause du processus de négociation. +1 encore –