私がやりたいことは、最初に着信する 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() の直後にアプリケーションがハングします。
誰にもアイデアはありますか?さらに情報が必要な場合は、記載してください。