[英]How to know the status of BLE scan in android?
我正在開發一個移動應用程序,我正在執行以下操作以從我的傳感器獲取數據。
我使用以下語句開始/重新啟動掃描
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
值。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.