1

私がやりたいことは、最初に着信する RFCOMM Bluetooth 接続に「hello」を送信してから終了することだけです。私のコードは Nokia N73 で動作しますが、Nokia E52 のような最新のデバイスでは動作しません。Nokia E52 では、次の直後にアプリケーションがハングします。

streamConnectionNotifier.acceptAndOpen();

コードは次のとおりです。

すべてのコードは、私の Thread の run() メソッド内にあります。

public class BTTest extends Thread {
    public void run() {
    ...
    }
}

最初に、Bluetooth デバイスを検出可能に設定しました。

try {
    LocalDevice localDevice = LocalDevice.getLocalDevice();
    localDevice.setDiscoverable(DiscoveryAgent.GIAC);
} catch (BluetoothStateException exception) {
    System.out.println(exception.toString());
}

次に、サーバー ソケットを準備します。

StreamConnectionNotifier streamConnectionNotifier = null;
try {
    String url = "btspp://localhost:" + new UUID(0x1101).toString() + ";name=SampleServer";
    streamConnectionNotifier = (StreamConnectionNotifier)Connector.open(url);
    if (streamConnectionNotifier == null) {
        System.out.println("Error: streamConnectionNotifier is null");
        return;
    }
} catch (IOException exception) {
    System.out.println(exception.toString());
}

次に、RFCOMM Bluetooth 接続の受信を待ちます。

StreamConnection streamConnection = null;
try {
    System.out.println("Waiting for incoming connection...");
    streamConnection = streamConnectionNotifier.acceptAndOpen();
    if (streamConnection == null) {
        System.out.println("Error: streamConnection is null");
    } else {
        System.out.println("Connection received.");
    }
} catch (IOException exception) {
    System.out.println(exception.toString());
}

StreamConnection オブジェクトを取得したら、「hello」を送信して接続を閉じます。

try {
    OutputStream out = streamConnection.openOutputStream();
    String s = "hello";
    out.write(s.getBytes());
    out.flush();
    streamConnection.close();
} catch (IOException exception) {
    System.out.println(exception.toString());
}

Nokia N73 では、「接続を受信しました」と表示されます。ログで、クライアント側で「こんにちは」を受け取ります。しかし、Nokia E52、Nokia 5230、Nokia E71 では、streamConnectionNotifier.acceptAndOpen() の直後にアプリケーションがハングします。

誰にもアイデアはありますか?さらに情報が必要な場合は、記載してください。

4

1 に答える 1

0

SPP UUID()を使用する代わりに0x1101、独自の128ビットUUIDを指定する必要があります(uuidgenまたは同様のツールを使用)。アプリケーションがハングしている電話では、おそらく別のSPPサービスが実行されています。

于 2011-01-02T17:17:43.483 に答える