私は今Android用ブルートゥースアプリをしばらく使っています。私がBluetoothのサービスクラスでmySocket.connect();
をプリフォームすると、ときどき無期限にブロックされます。私はBluetoothSocket.close()
のドキュメントを読んで、次のように書いています。AndroidでBluetooth:私のSocket.connect()が永久にブロックされ、Socket.closeがブロック解除されない
すぐにこのソケットを閉じて、関連するすべてのリソースを解放してください。
他のスレッドのこのソケットでブロックされた呼び出しをすぐに引き起こします。 IOExceptionをスローします。
しかし、これは私にとってはうまくいかないようです。ここで私のタイマーを設定し、次に接続しようとしているコードです。
//code for starting timer and connecting
MyRunnable runner = new MyRunnable(mySocket);
Thread countThread = new Thread(runner);
countThread.start();
mySocket.connect();
runner.setSocketConnected();
//code for MyRunnable
private class MyRunnable implements Runnable{
private boolean didSocketConnect = false;
private boolean socketConnectFailed = false;
private BluetoothSocket socket;
public MyRunnable(BluetoothSocket socket){
this.socket = socket;
}
public void run() {
long start = System.currentTimeMillis();
while(ESTABLISH_TIMEOUT + start >= System.currentTimeMillis() && !didSocketConnect && !socketConnectFailed){
}
if(!didSocketConnect && !socketConnectFailed){
Log.v(TAG,"Reached Timeout and socket not open. Look for #");
try {
socket.close();
Log.v(TAG,"#THIS CALL SHOULD BE MADE AFTER REACHED TIMEOUT AND SOCKET NOT OPEN");
} catch (IOException e) {
Log.v(TAG,"Closing the socket connection fail--", e);
}
}else{
Log.v(TAG, "Connected or Failed Before Timeout Thread Hit");
}
}
public void setSocketConnected(){
didSocketConnect = true;
}
public void setSocketFailed(){
socketConnectFailed= true;
}
}
私は無期限()に近い、それもブロックを呼び出して、Connect()の呼び出しはBluetoothSocket.close()のドキュメントにもかかわらず、IOExceptionが投げたことがないとき。 connect()とclose()が無期限にブロックされないようにするにはどうすればよいでしょうか?
注:私はこのプロジェクトでAndroid 2.2を使用しています。
この問題の原因と解決方法を見つけたことはありますか?私は同じことに遭遇していますが、私は2つのスレッド、接続スレッドとclose()を呼び出す別のスレッドを使用しています。 –
私はここで同じ問題があります。 Mainthreadは近いうちに電話してきますが、必ずしもそうではありませんが、時にはうまくいくこともあります。 – NikkyD