簡體   English   中英

隨后在 BLE Android 應用程序中調用 disconnect() 和 close() 是正確的方法嗎?

[英]Is calling disconnect() and close() subsequently the right approach in BLE Android app?

我正在努力實現一個連接到 BLE 設備的 Android 應用程序,但缺乏適當的文檔正在殺死我。 如果我運行該應用程序一次它可能工作但下一次停止在某處(不知道在哪里),則似乎沒有兩次以相同的方式工作,但我得出的結論是我可能沒有使用disconnect()close()以正確的順序。

在說一個錯誤之后,我首先調用 disconnect() :

 public void disconnect() {
    mScanning = true;
    mConnected = false;
    startedConnect = false;
    if (mBluetoothAdapter == null || mBluetoothGatt == null) {
        scanLeDevice(true);
        return;
    }
    mBluetoothGatt.disconnect();
    scanLeDevice(true);
}

然后我調用close():

public void close() {
    if (mBluetoothGatt == null) {
        return;
    }
    mBluetoothGatt.close();
    mBluetoothGatt = null;
}

這是正確的做法還是錯誤的做法? 請注意,我正在調用scanLeDevice(true); 斷開連接后立即調用close() ,我認為這只是“完成”一切並停止掃描,對嗎?

當創建BluetoothGatt通過調用對象connectGatt上的BluetoothDevice ,則權利要求32中的一個(在目前的Android版本)在藍牙棧可用時隙。

如果 Android 是否應該嘗試保持與設備的連接,您現在可以在此對象上調用connectdisconnect來更改“目標”的狀態。 在您調用disconnect ,Android 將(永遠)嘗試連接到設備並在連接因任何原因斷開時自動重新連接到設備。 disconnect connect后再次調用connect將使其嘗試再次連接。

注:設置autoConnectfalse初始connectGatt調用將設置第一個隱含的連接嘗試(通常為30秒)的初始超時,如果設備連接和連接后下降,它不會自動嘗試重新連接。

因此, BluetoothGatt對象可以處於“斷開連接”狀態,但仍會占用藍牙堆棧中的 32 個插槽之一。 當您調用close ,您會釋放BluetoothGatt對象的所有資源並將插槽返回到藍牙堆棧。 因此,關閉也隱含地意味着斷開連接。 要潛在地解決一些有問題的 Android 設備,您可以在close之前調用BluetoothGatt對象上的disconnect 請注意,一旦您調用了close ,您就無法在該BluetoothGatt對象上調用任何其他方法。

注意:關閉藍牙意味着自動銷毀所有BluetoothGatt對象。

回到你的問題,我真的不明白你的 BLE 掃描與連接/斷開/關閉有什么關系。 掃描與連接和BluetoothGatt對象完全分開,並且連接和同時執行掃描沒有問題。 要停止掃描,請在BluetoothLeScanner上調用stopScan

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM