簡體   English   中英

如何知道android中BLE掃描的狀態?

[英]How to know the status of BLE scan in android?

我正在開發一個移動應用程序,我正在執行以下操作以從我的傳感器獲取數據。

  1. 在前台服務中運行 BLE 掃描。
  2. 檢測藍牙開/關狀態並自動啟動和停止 BLE 掃描。
  3. 每 3 分鍾重新啟動一次 BLE 掃描(我在某處讀到,當運行超過 15 分鍾時,BLE 掃描會自動停止)。 所以為了安全起見,我每 3 分鍾重新啟動一次。

我使用以下語句開始/重新啟動掃描

scanner.startScan(scanFilters,scanSettings,callback);

我使用以下語句停止掃描

scanner.stopScan(callback);

scanFilters中,我設置了設備 ID 的名稱,在scanSettings中,我將掃描模式設置為LOW_LATENCY

該應用程序大部分時間都運行良好。 但有時我會收到一些客戶的抱怨,即使藍牙和定位功能打開,也沒有數據更新。 傳感器工作正常。 當我開始藍牙 LE 掃描時,如何確保掃描實際上正在運行? 我可以在任何地方獲得掃描運行或未運行的狀態。

既然您說這種情況只發生在某些客戶身上,那么您的問題可能還有其他來源。

BLE 需要ACCESS_FINE_LOCATION權限才能在運行低於 8.0 的 Android 版本的設備上工作。 更高版本可以使用Device Companion Pairing 您可能已將權限添加到您的應用程序清單文件中,如下所示:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

但是在運行時檢查此權限並在未授予時請求它會更安全。 查看 頁面以獲取有關如何在運行時向用戶請求權限的更多信息。

你需要為此做一些修改。

  • 從下面的代碼中,我們發現mScanning是標記。
  • 當開始和停止掃描時,我們正在改變mScanning值。
  • 現在我們聲明一個 static get 方法來檢查mScanning是 true 還是 false。
public static boolean isScanRunning(){
   return mScanning;
}
  • 根據您可以理解的值,掃描是否正在運行。
private BluetoothLeScanner bluetoothLeScanner =
        BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner();
private boolean static mScanning = false;
private Handler handler = new Handler();

// Stops scanning after 10 seconds.
private static final long SCAN_PERIOD = 10000;

private void scanLeDevice() {
    if (!mScanning) {
        // Stops scanning after a pre-defined scan period.
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mScanning = false;
                bluetoothLeScanner.stopScan(leScanCallback);
            }
        }, SCAN_PERIOD);

        mScanning = true;
        bluetoothLeScanner.startScan(leScanCallback);
    } else {
        mScanning = false;
        bluetoothLeScanner.stopScan(leScanCallback);
    }
}

暫無
暫無

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

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