2012-08-23 5 views
7

J'essaye de créer une application bluetooth de base pour tester l'appareil.Connexion Bluetooth Android - Échec de la découverte du service

J'ai obtenu le code de developer.android. Voici le lien: http://developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingDevices

Voici exécuter une partie de mon code de fil:

 public void run() { 

     mBluetoothAdapter.cancelDiscovery(); 
     Log.i(TAG, "Discovery Cancel!"); 

     try { 
      Log.i(TAG, "Connection Started"); 
      mmSocket.connect(); 
      Log.i(TAG, "Connection Ended"); 
     } catch (IOException e) { 
      try { 
       Log.e(TAG, "Connection Failed", e); 
       mmSocket.close(); 
      } catch (IOException e2) { 
       Log.e(TAG, "Connection Close Failed", e2); 
      } 
      return; 
     } 

Tout ce que j'ai essayé mmSocket.connect(); ne fonctionne jamais. jette toujours un IOException et je reçois ce journal de mon logcat:

java.io.IOException: Service discovery failed
at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:403)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:213)

Je l'ai regardé ces articles, et essayé les choses écrites, aucun d'entre eux n'a résolu mon problème.

Android Bluetooth: Service Discovery Failed, connection to Desktop/Laptop

Service discovery failed exception using Bluetooth on Android

Bluetooth connection on Android ICS not possible

Android Bluetooth java.io.IOException: Connection refused?

Btw Je travaille sur Android 4.0.4 ics.

Je sais que ce n'est pas un problème de périphérique, parce que j'ai essayé cette application sur différents appareils.

Répondre

5

Je ne sais pas et je ne comprends toujours pas les trucs UUID mais le problème était l'UUID. J'utilise l'UUID que j'ai obtenu des logs du noyau et c'est 00001105-0000-1000-8000-00805F9B34FB.

0

Vous devrez fournir un UUID valide pour la découverte du service.

BluetoothSocket sock = bdevice.createRfcommSocketToServiceRecord(VALID_UUID); 

Il y a plusieurs UUID communes pour différents services Bluetooth standard (par défaut) (mains libres, transfert de fichiers, etc.).

See here

0

Essayez d'utiliser l'exemple de projet Chat Bluetooth fourni comme une partie du SDK si vous essayez juste de tester l'appareil. Le code que vous essayez d'utiliser et celui fourni sur developer.android.com sont inclus dans l'exemple Bluetooth Chat.

+0

Je suis déjà l'application de ces exemples de code, mais le résultat est toujours identique. – juliadream

1

J'ai travaillé à travers un processus d'apprentissage similaire. J'ai essayé de documenter ce que j'ai appris dans une série d'exemples.

Celui-ci pourrait être utile:

http://digitalhacksblog.blogspot.com/2012/05/android-example-bluetooth-simple-spp.html

Il est pour la mise en place d'une simple connexion entre un appareil Android et un PC via Bluetooth. Les exemples contiennent les fichiers Android ainsi qu'un serveur SPP en Java et un en Perl pour le PC.

Espérons que cela aide.

+0

Je travaille sur ce sujet mais je ne travaille toujours pas, je pense que je fais quelque chose de terriblement mal. Merci de votre intérêt. – juliadream

1

Assurez-vous que votre application ne tente pas de se connecter lorsque l'adaptateur est occupé avec la découverte: Il semble que le problème était que, avant que j'ai appelé

clientSocket.connect() 

je devais appeler

btAdapter.cancelDiscovery() 

Cela a permis de résoudre le même problème pour moi Matts Reco

2

L'extrait de code suivant fonctionne pour moi. Essayez ...

BluetoothDevice mmDevice; 
boolean temp = mmDevice.fetchUuidsWithSdp(); 
UUID uuid = null; 
if(temp){ 
uuid = mmDevice.getUuids()[0].getUuid(); 
} 
tmp = device.createRfcommSocketToServiceRecord(uuid); 
+0

luttait pendant des heures et votre "mmDevice.getUuids() [0] .getUuid()" a résolu mon problème. Maintenant, j'ai besoin de comprendre votre logique 'if (temp)' –

5

Son fonctionnement pour moi

BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID); 
Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class}); 
socket = (BluetoothSocket) m.invoke(device, 1); 
bluetoothAdapter.cancelDiscovery(); 
socket.connect(); 
+1

A travaillé pour moi aussi. – DragonT

Questions connexes