2011-10-25 26 views
2

--------解決済み-------------- 私はアンドロイドを書いていますRFCOMMを使用してBluetoothを使用してデバイスに接続するアプリです。私は接続を確立するための基礎としてBluetoothChatの例を使用しています。 RFCOMM_CreateConnection - すでに開いている状態:2、RFC状態:4、MCB状態:5 これは、デバイスに接続してアプリケーションを終了すると発生しがちです(onDestroyを呼び出します)。 ())、それを再度開いて再度接続しようとすると、上記の結果になります。RFCOMM_CreateConnection - 既に開いている状態:2、RFC状態:4、MCB状態:5

Iは(例えばref.BluetoothChat)ConnectThreadに接続するためにこの方法を使用する:。 メソッドm = device.getClass()getMethod( "createRfcommSocket"、新たなクラス[] {int.classを})。 tmp =(BluetoothSocket)m.invoke(device、Integer.valueOf(1));
mmSocket = tmp;

これを解決するのは、アンドロイド携帯電話のBluetoothをオン/オフすることだけです。これは、ソケットがonDestroy()では閉じられていないと思っていますが、前述の例のようにすべてのスレッドを閉じることを呼びます。 すべてのアイデアが妥協されるでしょう。

+0

Louis A. Prado私はonResume接続状態をチェックし、それに応じてBluetooth接続をrestards私の主な活動、でチェックを行うことで、これを解決しました。 –

+0

これは5年前の質問で超ランダムかもしれませんが、あなたがこれを観察したデバイスを覚えていますか?私はGoogleで働いており、私はこれの根本的な原因を見つけようとしています。 –

+0

@ZachJohnson私は2016年にこの問題を正確に抱えており、ビジネスパートナーの1人に解決しようとしています。 デバイスはHTC Flyer P510eです。これが少し助けてくれることを願っています。 – Lvka

答えて

3

私もこの1つまずいた、とここで私が見つけた答えは:

このエラーが複数回開く場合、起こるとBluetoothソケット接続を閉じることがあります。

:ここでこのソケットがすでにそうでない場合は接続し、falseの場合、trueを返します isConected()と呼ばBluetoothSocketのメソッド、APIからオリジナルの抜粋があるAPIレベル14から始めて

ソリューション

このソケットの接続状態を取得します。つまり、 リモートデバイスとのアクティブ接続があるかどうかを取得します。あなたは、接続を閉じた後にスリープ状態にBluetooth対応の処理スレッドを置くことによってこの問題を回避することができます< 14 APIレベルについては

から1000ミリ秒は、ここに例があり、十分なはずです(btDeviceはBluetoothDevice型であるとされています初期化以下のコード)の前に:

try { 
     //Open the socket to an SPP device (UUID taken from Android API for createRfcommSocketToServiceRecord) 
     BluetoothSocket btSocket = btDevice.createRfcommSocketToServiceRecord("00001101-0000-1000-8000-00805F9B34FB"); 
     //Connect to the socket 
     btSocket.connect(); 
     //Close the socket 
     btSocket.close(); 
     //Sleep time of 1000ms after closing the socket 
     SystemClock.sleep(POST_RESET_DELAY); 

    } catch (Throwable e) { 
     // Log error message 
    } 

PsとSystemClock.sleepの代わりにThread.sleepを使うこともできますが、SystemCockのスリープは中断することはできませんが、Thread.sleepは中断される可能性があります。そのため、どちらのオプションが目的に適しているかによって異なります。

出典:

関連する問題