6

我正在尝试了解工作客户端-服务器蓝牙。android是客户端。PC是服务器。

我找到了代码。这适用于三星 Galaxy 10.1(android 3.2),但不适用于三星 Galaxy s(android 2.3.3)和 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
4

2 回答 2

6

您的设备因服务发现而失败(我认为是这样)。

  1. 我已经阅读了许多三星设备和 HTC 设备的 BT 问题,但那些专门针对 L2CAP/HID 配置文件的问题。Soln:如果你使用 L2CAP,你可以使用 SPP 或 RFCOMM

  2. 如果您使用的是上述解决方案中的一种,请尝试使用标准 UUID

SPP 00001101-0000-1000-8000-00805F9B34FB

RFCOMM 00000003-0000-1000-8000-00805F9B34FB

编辑

或者,您可以尝试使用反射来获取您的套接字连接,类似于以下方法

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; }
}
于 2012-04-25T12:53:32.223 回答
2

试试这个 :

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

它对我有用 :)
在 2.1 - 3.3 和 4.0.4 android 版本上测试。

于 2012-09-07T20:46:39.037 回答