2012-04-25 7 views
6

Tôi đang cố gắng hiểu Bluetooth công việc của máy khách. Android là khách hàng ở đâu. PC là máy chủ.Bluetooth từ xa

Tôi tìm thấy code. Điều này đã làm việc một thiên hà samsung 10.1 (android 3.2), nhưng không hoạt động một thiên hà samsung s (android 2.3.3) ans 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 

Trả lời

6

Điện thoại của bạn không cho khám phá dịch vụ (tôi nghĩ vậy).

  1. Tôi đã đọc về các vấn đề BT với nhiều thiết bị Samsung và các thiết bị HTC nhưng những nơi đặc biệt cho L2CAP/profile HID. soln: bạn có thể sử dụng SPP hoặc RFCOMM nếu bạn đang sử dụng L2CAP

  2. Nếu bạn đang sử dụng một trong những nêu trên trong dung dịch sau đó hãy thử sử dụng với UUID chuẩn

SPP 00001101-0000-1000- 8000-00805F9B34FB

RFCOMM 00000003-0000-1000-8000-00805F9B34FB

Sửa

Hoặc bạn có thể thử sử dụng phản ánh để có được một cái gì đó kết nối ổ cắm của bạn như các phương pháp dưới đây

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

không hoạt động, có thể có thêm tùy chọn? – alezhka

+0

nó đang làm việc android 2.3, nhưng không phải là 2.2 – alezhka

+0

làm bạn bất kỳ lỗi mới hoặc cùng một vấn đề .. và nó hoạt động với tất cả 2.3 thiết bị bạn có –

2

Hãy thử điều này:

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"); 

Nó đã làm việc cho tôi :)
Thử nghiệm trên 2,1-3,3 và 4.0.4 phiên bản Android.

+0

cũng đã làm việc cho tôi. Nhưng tại sao?? – Hugo

+0

Tôi nghĩ rằng đó là vì các điện thoại thông minh mới hơn không sử dụng cùng một giao thức Bluetooth so với các giao thức cũ hơn nên UUID của chúng cũng đã thay đổi. – nonozor