切断()とclose()BLE Androidアプリで、その後適切なアプローチを呼んでいますか?

DJ BMX:

私は、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呼び出すことによって、オブジェクトをconnectGattBluetoothDevice、あなたは、Bluetoothスタックで利用可能なスロットが(現在のAndroidのバージョンで)32の1主張します。

このオブジェクトでは、あなたは今、呼び出すことができますconnectし、disconnectAndroidはデバイスかどうかとの接続を維持しようとする必要がある場合は、「目標」の状態を変更します。あなたが呼ぶまではdisconnect、Androidは(永遠に)デバイスに接続すると自動的に接続が何らかの理由で低下した場合に、デバイスに再接続しようとします。呼び出しconnect後に再びと、disconnectそれが再接続しようとなります。

注:設定autoConnectfalse初期にconnectGatt呼び出しが最初の暗黙的な接続の試み(通常は30秒)の初期タイムアウトを設定し、デバイスが接続すると接続が後に低下した場合、それが自動的に再接続しようとしません。

だから、BluetoothGattオブジェクトが「切断」状態になることが、まだのBluetoothスタックで32個のスロットのいずれかを取ることができます。あなたが呼ぶときclose、あなたはのためにすべてのリソースを解放しBluetoothGatt、オブジェクトとBluetoothスタックにスロットを返します。近くには、したがって、暗黙的にも切断を意味します。潜在的にあなたが呼び出すことができ、いくつかのバグがAndroidのデバイスを回避するにはdisconnect上のBluetoothGatt前にオブジェクトcloseあなたが呼ばれていることに注意してくださいたらclose、あなたはその上の任意の他のメソッドを呼び出すことはできませんBluetoothGattオブジェクトを。

注:すべての破壊のBluetooth手段消灯BluetoothGattオブジェクトを自動的に。

戻るあなたの質問に、私は本当にあなたのBLEスキャンが接続/切断/クローズに関係しているかを理解していません。スキャンは、接続とは全く別のものですBluetoothGattオブジェクトと接続し、同時にスキャンを実行しているの問題はありません。スキャンを停止するには、呼び出しstopScanBluetoothLeScanner

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=371003&siteId=1