Bluetooth remote

I am trying to understand the operation of client-server bluetooth. Where android is the client. PC server.

I found the code . This worked on the galaxy samsung 10.1 (android 3.2), but the galaxy samsung s (android 2.3.3) and htc wildfire s (android 2.2) do not work.

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 
+6
source share
2 answers

The device does not work to detect the service (I think so).

  • I read about BT issues with numerous Samsung devices and HTC devices, but those specifically designed for the L2CAP / HID profile. Soln: you can use SPP or RFCOMM if you use L2CAP

  • If you use one of the above solutions, try using with a standard UUID

SPP 00001101-0000-1000-8000-00805F9B34FB

RFCOMM 00000003-0000-1000-8000-00805F9B34FB

Edit

Alternatively, you can try using reflection to get a socket connection, sort of like the method below.

 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; } } 
+6
source

Try the following:

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

It worked for me :)
Tested in Android versions 2.1 - 3.3 and 4.0.4.

+2
source

Source: https://habr.com/ru/post/914125/


All Articles