Aller au contenu

Bluetooth : reconnection du socket


roly

Recommended Posts

Bonjour,

j'ai un gros problème qui m'ennuie vraiment beaucoup avec le bluetooth.

En gros: J'ai un composant bluetooth constitué d'un bouton. Si le bouton est appuyé, le device est allumé et donc détectable par BT.

Ce que je cherche à faire: Lors du premier clic, je fais l'appareillage. (Donc je me connecte au device, définit un socket que je connecte. Je reçois un message de confirmation)

Puis le device s'éteint. (On relache le bouton)

Deuxième clic: Le device se rallume et envois un message.

Où j'en suis: Tout marche jusqu'au deuxième clic. C'est à dire que je suis connecté, et que je reçois bien mon message de confirmation du premier clic.

Mon problème: Ben le deuxième clic. Le problème étant que j'ai un socket, et que le device s'est éteint puis rallumé. Que faire pour à nouveau lire dans inputstream?

Si j'essaye de lire cash dans le socket: device busy

Si je relance socket.connect():

05-17 03:39:56.938: ERROR/BluetoothEventLoop.cpp(92): onDiscoverServicesResult: D-Bus error: org.bluez.Error.Failed (Connection timed out)
05-17 03:39:56.948: ERROR/waitFor(15236): java.io.IOException: Service discovery failed

Si je refait toute l'initialisation du socket,(C'est à dire BTDevice.createRfcommSocket...) Meme chose.

private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

   public void init(){
       BluetoothSocket tmp = null;

       try {
           /*Method m = mmDevice.getClass().getMethod("createRfcommSocket",
                   new Class[] { int.class });
               tmp = (BluetoothSocket)m.invoke(mmDevice, Integer.valueOf(1));*/
          tmp = mmDevice.createRfcommSocketToServiceRecord(MY_UUID);
      } catch (IOException e) {
           Log.e("init", e.toString());
      } 

       mmSocket=tmp;
       try{
           output = new PrintStream(mmSocket.getOutputStream());    
           input = new BufferedReader(new InputStreamReader(mmSocket.getInputStream()));
       }catch (IOException e) {
           Log.e("Init",e.toString());
       }
   }

Ce que je fais (plus ou moins, vu le nombre de tests que j'ai fait...) au moment du deuxieme clic:

init();
       try {
           mmSocket.connect();
       } catch (IOException connectException) {
           Log.e("waitFor",connectException.toString());
       }

Help :mad:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...