6

私は仕事のクライアントサーバーブルートゥースを理解しようとしています。アンドロイドがクライアントです。PCはサーバー。

コードが見つかりました。これは、samsung galaxy 10.1 (android 3.2) では機能しましたが、samsung galaxy 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
4

2 に答える 2

6

あなたのデバイスはサービス検出に失敗します (私はそう思います) .

  1. 多くのSamsungデバイスと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 に答える