私は、BLEデバイスに接続するAndroidアプリの実装に取り組んでいますが、適切な文書の欠如は、私を殺しています。それがうまくいくかもしれない一度私はアプリを実行するが、次回はどこか(ノーアイデアを)停止しますが、私はちょっと私が使用していない可能性があるという結論に達した場合は何も二度同じように動作しているようだしないdisconnect()
とclose()
右のためです。
LET後の最初のエラーIの呼切断を()と言います:
public void disconnect() {
mScanning = true;
mConnected = false;
startedConnect = false;
if (mBluetoothAdapter == null || mBluetoothGatt == null) {
scanLeDevice(true);
return;
}
mBluetoothGatt.disconnect();
scanLeDevice(true);
}
その後、私は()を呼び出し近いです:
public void close() {
if (mBluetoothGatt == null) {
return;
}
mBluetoothGatt.close();
mBluetoothGatt = null;
}
これは正しいことを行う方法や間違っていますか?私は呼び出していますのでご注意くださいscanLeDevice(true);
切断した後、右のが、その後close()
、私はちょうど、すべてを「仕上げ」とスキャン権を停止されたと思われ呼ばれているのですか?
あなたが作成するとBluetoothGatt
呼び出すことによって、オブジェクトをconnectGatt
上BluetoothDevice
、あなたは、Bluetoothスタックで利用可能なスロットが(現在のAndroidのバージョンで)32の1主張します。
このオブジェクトでは、あなたは今、呼び出すことができますconnect
し、disconnect
Androidはデバイスかどうかとの接続を維持しようとする必要がある場合は、「目標」の状態を変更します。あなたが呼ぶまではdisconnect
、Androidは(永遠に)デバイスに接続すると自動的に接続が何らかの理由で低下した場合に、デバイスに再接続しようとします。呼び出しconnect
後に再びと、disconnect
それが再接続しようとなります。
注:設定autoConnect
をfalse
初期にconnectGatt
呼び出しが最初の暗黙的な接続の試み(通常は30秒)の初期タイムアウトを設定し、デバイスが接続すると接続が後に低下した場合、それが自動的に再接続しようとしません。
だから、BluetoothGatt
オブジェクトが「切断」状態になることが、まだのBluetoothスタックで32個のスロットのいずれかを取ることができます。あなたが呼ぶときclose
、あなたはのためにすべてのリソースを解放しBluetoothGatt
、オブジェクトとBluetoothスタックにスロットを返します。近くには、したがって、暗黙的にも切断を意味します。潜在的にあなたが呼び出すことができ、いくつかのバグがAndroidのデバイスを回避するにはdisconnect
上のBluetoothGatt
前にオブジェクトclose
。あなたが呼ばれていることに注意してくださいたらclose
、あなたはその上の任意の他のメソッドを呼び出すことはできませんBluetoothGatt
オブジェクトを。
注:すべての破壊のBluetooth手段消灯BluetoothGatt
オブジェクトを自動的に。
戻るあなたの質問に、私は本当にあなたのBLEスキャンが接続/切断/クローズに関係しているかを理解していません。スキャンは、接続とは全く別のものですBluetoothGatt
オブジェクトと接続し、同時にスキャンを実行しているの問題はありません。スキャンを停止するには、呼び出しstopScan
にBluetoothLeScanner
。