2012-08-23 4 views
7

Ich versuche eine grundlegende Bluetooth-Anwendung zu erstellen, um das Gerät zu testen.Android Bluetooth Verbindung - Service Discovery fehlgeschlagen

Ich habe den Code von developer.android. Hier ist der Link: http://developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingDevices

Hier ist ein Teil meines Themas Code ausführen:

 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; 
     } 

Was auch immer ich versucht habe mmSocket.connect(); nie funktioniert. Immer eine IOException und ich bekommen, dass log aus meiner logcat:

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

ich diesen Artikel angesehen haben, und versucht, die Dinge geschrieben, keiner von ihnen hat mein Problem gelöst.

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 auf Android 4.0.4 ics ich arbeite.

Ich weiß, das ist kein Geräteproblem, weil ich diese App auf verschiedenen Geräten ausprobiert habe.

Antwort

5

Ich weiß es nicht und ich verstehe immer noch nicht die UUID Sachen, aber das Problem war die UUID. Ich benutze die UUID, die ich von den Kernel-Logs bekommen habe und es ist 00001105-0000-1000-8000-00805F9B34FB.

0

Sie müssen eine gültige UUID für die Serviceerkennung bereitstellen.

BluetoothSocket sock = bdevice.createRfcommSocketToServiceRecord(VALID_UUID); 

Es gibt verschiedene UUIDs für verschiedenen Standard (Standard) Bluetooth-Dienste (freihändig, Dateitransfer, etc.).

See here

0

Versuchen Sie, die Bluetooth Chat Beispielprojekt als Teil des SDK verwenden, wenn Sie nur das Gerät zu testen versuchen. Der Code, den Sie verwenden möchten, und der auf developer.android.com bereitgestellte Code sind im Beispiel für den Bluetooth-Chat enthalten.

+0

Ich bin schon diese Codebeispiele anwenden, aber das Ergebnis ist immer gleich. – juliadream

1

Ich arbeitete durch einen ähnlichen Lernprozess. Ich habe versucht, das, was ich gelernt habe, in einer Reihe von Beispielen zu dokumentieren.

Dies könnte hilfreich sein:

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

Es ist für eine einfache Verbindung zwischen einem Android-Gerät und einem PC über Bluetooth einrichten. Die Beispiele enthalten die Android-Dateien sowie einen SPP-Server in Java und einen in Perl für den PC.

Hoffe, das hilft.

+0

Ich arbeite daran, aber immer noch nicht funktioniert, ich denke, ich mache etwas schrecklich falsch. Danke für Ihr Interesse. – juliadream

1

Stellen Sie sicher, dass Ihre App nicht zu verbinden versucht, während der Adapter mit Entdeckung beschäftigt ist: Es war das Problem scheint, dass, bevor ich

clientSocket.connect() 

rief ich

btAdapter.cancelDiscovery() 

nennen benötigt Dies half, das gleiche Problem für mich zu lösen Matts Reco

2

Der folgende Codeausschnitt funktioniert für mich. Probieren Sie es ...

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

kämpfte stundenlang und Ihre "mmDevice.getUuids() [0] .getUuid()" löste mein Problem. Jetzt muss ich Ihre 'if (temp)' Logik verstehen –

5

Sein für mich arbeiten

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

Arbeitete auch für mich. – DragonT