2012-04-25 6 views
6

Ich versuche, die Arbeit Client-Server-Bluetooth zu verstehen. Wo Android ist Client. PC ist Server.Remote Bluetooth

Ich fand code. Dies funktionierte eine Samsung Galaxy 10.1 (Android 3.2), funktioniert aber nicht eine Samsung Galaxy s (Android 2.3.3) und HTC Wildfire s (Android 2.2).

MY_UUID = UUID.fromString("04c6093b-0000-1000-8000-00805f9b34fb"); 

04-25 18:32:37.023: D/BluetoothCommandService(13665): setState() 1 -> 2 
04-25 18:32:37.033: I/BluetoothCommandService(13665): BEGIN mConnectThread 
04-25 18:32:37.063: E/BluetoothService.cpp(102): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session) 
04-25 18:32:37.103: E/BluetoothCommandService(13665): Unable to start Service Discovery 
04-25 18:32:37.103: E/BluetoothCommandService(13665): java.io.IOException: Unable to start Service Discovery 
04-25 18:32:37.103: E/BluetoothCommandService(13665): at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:367) 
04-25 18:32:37.103: E/BluetoothCommandService(13665): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:201) 
04-25 18:32:37.103: E/BluetoothCommandService(13665): at com.luugiathuy.apps.remotebluetooth.BluetoothCommandService$ConnectThread.run(BluetoothCommandService.java:258) 
04-25 18:32:37.103: D/BluetoothCommandService(13665): setState() 2 -> 1 

Antwort

6

Ihr Gerät für Service Discovery nicht (ich glaube so).

  1. Ich habe über BT-Probleme mit zahlreichen Samsung-Geräten und HTC-Geräten gelesen, aber diejenigen, die speziell für L2CAP/HID-Profil. Soln: Könnten Sie SPP oder RFCOMM verwenden, wenn Sie L2CAP verwenden

  2. Wenn Sie eine der oben genannten verwenden, dann in Lösung erwähnt versuchen, mit Standard-UUID mit

SPP 00001101-0000-1000- 8000-00805F9B34FB

RFCOMM 00000003-0000-1000-8000-00805F9B34FB

bearbeiten

Alternativ können Sie versuchen, mithilfe von Reflektion Ihre Socket-Verbindung so etwas wie die unten Methode, um

private static BluetoothSocket createBluetoothSocket(
     int type, int fd, boolean auth, boolean encrypt, String address, int port){ 
    try { 
     Constructor<BluetoothSocket> constructor = BluetoothSocket.class.getDeclaredConstructor(
       int.class, int.class,boolean.class,boolean.class,String.class, int.class); 
     constructor.setAccessible(true); 
     BluetoothSocket clientSocket = (BluetoothSocket) 
      constructor.newInstance(type,fd,auth,encrypt,address,port); 
     return clientSocket; 
    }catch (Exception e) { return null; } 
} 
+0

funktioniert nicht, können mehr Optionen haben? – alezhka

+0

es funktioniert ein Android 2.3, aber nicht ein 2.2 – alezhka

+0

tun Sie keine neuen Fehler oder das gleiche Problem .. und funktioniert es mit allen 2.3 Geräten haben Sie –

2

Versuchen Sie folgendes:

static int sdk = Integer.parseInt(Build.VERSION.SDK); 

private static final UUID MY_UUID = 
    UUID.fromString((sdk<=8||sdk>=11)?"04c6093b-0000-1000-8000-00805f9b34fb":"00001101-0000-1000-8000-00805F9B34FB"); 

Es hat für mich gearbeitet :)
Getestet auf 2,1-3,3 und 4.0.4 Android-Versionen.

+0

Es hat auch für mich funktioniert. Aber warum?? – Hugo

+0

Ich denke, es ist, weil neuere Smartphones nicht das gleiche Bluetooth-Protokoll als ältere verwenden und ihre UUID hat sich auch geändert. – nonozor