簡體   English   中英

Android BLE 掃描屏幕關閉(使用 Galaxy)

[英]Android BLE scan with screen off (with Galaxy)

我正在使用 Galaxy S10、android 10。從這里開始,使用三星設備的 BLE 掃描需要非空掃描過濾器才能在屏幕關閉 state 中進行掃描。

下面是我的 AdvertiseData 和 ScanFilter 代碼。

ParcelUuid aaUuid = ParcelUuid.fromString("0000aa11-0000-1000-8000-00805F9B34FB");

AdvertiseData advertiseData = new AdvertiseData.Builder()
                .setIncludeDeviceName(true) 
                .addServiceUuid(aaUuid)
                .build();

ScanFilter scanFilter = new ScanFilter.Builder()
                .setServiceUuid(aaUuid)
                .build();

打開屏幕,它工作得很好。 但是,在屏幕關閉的情況下,它也不起作用。

我設置了 10 次掃描來檢查這一點。 起初,屏幕打開,它工作得很好。 當它變成屏幕關閉時,第一次掃描效果很好。 但是沒有出現下一個掃描結果,它只是開始下一個掃描過程(沒有結果)。

每次掃描重復的“WakeLock”都會產生相同的結果。 如何解決這個問題呢?


添加1.我使用WorkManager來處理后台進程。 然后我在尋找另一種方法。

添加2.下面是我的scancallback代碼。

private ScanCallback mScanCallback = new ScanCallback() {
        @Override
        public void onScanResult(int callbackType, ScanResult result) {
            super.onScanResult(callbackType, result);
            if (result.getDevice().getName() != null)
                setBleScanResult(result);
        }

        @Override
        public void onBatchScanResults(List<ScanResult> results) {
            super.onBatchScanResults(results);
        }

        @Override
        public void onScanFailed(int errorCode) {
            super.onScanFailed(errorCode);
            Log.d("LOG_BLESCANNING_onScanFailed", "Error Code : " + errorCode);
        }
    };

添加 3. 以下是屏幕關閉時的日志

...
D/Worker: ============ Bluetooth Scanning start ============
D/LOG_BluetoothScan: Bluetooth scanning started successfully
D/BluetoothAdapter: isLeEnabled(): ON
D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=4 mScannerId=0
D/BluetoothAdapter: isLeEnabled(): ON
D/LOG_BluetoothScan: Bluetooth scanning stopped
...

並開啟屏幕

D/Worker: ============ Bluetooth Scanning start ============
D/LOG_BluetoothScan: Bluetooth scanning started successfully
D/BluetoothAdapter: isLeEnabled(): ON
D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=4 mScannerId=0
D/LOG_BluetoothScan: W S10 | [00001111-0000-1000-8000-00805f9b34fb] | 55:40:DE:86:D0:03
D/LOG_BluetoothScan: W S10 | [00001111-0000-1000-8000-00805f9b34fb] | 55:40:DE:86:D0:03
D/LOG_BluetoothScan: W S10 | [00001111-0000-1000-8000-00805f9b34fb] | 55:40:DE:86:D0:03
D/LOG_BluetoothScan: W S10 | [00001111-0000-1000-8000-00805f9b34fb] | 55:40:DE:86:D0:03
D/BluetoothAdapter: isLeEnabled(): ON
D/LOG_BluetoothScan: Bluetooth scanning stopped

加4。我很好奇“為什么這個問題只在ble掃描中?” 我檢查了 state 屏幕上的 ble 廣告沒有任何問題。


補充5。廣告也有問題……但不是必須的。 我認為 MainActivity - Worker (from WorkManager) 連接不利於控制這種情況。

這就是我解決問題的方法

  1. 使用“前台服務”
  • 我沒有檢查 workmanager 是否可用,但 ForegroundService 運行良好。 我使用 timer 和 timertask 在前台重復該過程。
  1. 授予“始終允許”權限
  • 這是主要問題。 打盹模式不允許我的應用使用 GPS。 因此,我打開 GPS 設置並將我的應用程序的權限設置為在使用應用程序時始終允許。

這是我的工作代碼 - 甚至設備屏幕也被鎖定。

更新:

感謝您提到您使用了WorkerManager ”。 之后只在我腦海中閃過。 從 android 8 開始,google 引入了 Doze 模式等電池優化。 因此,它不允許服務在睡眠(打盹模式)期間在后台運行。 因此,您可以進行 BLE 掃描 **

使用“前台服務”

** 代替 Worker 或 Jobscheduler 等。

請查看此鏈接: https://developer.android.com/training/monitoring-device-state/doze-standby

兩年前,我也在這個階段掙扎。 切換到“Forgreound Service”后它正在工作

OLD(關於初始化 - BLE 掃描)請檢查您的代碼。 這很簡單。 等待您的回復。

1.初始化掃描過濾器

    btLeScanFilters = new ArrayList<ScanFilter>();
    ScanFilter scanFilter = new ScanFilter.Builder()
            .setServiceUuid(new ParcelUuid("........ uuid reference ......"))
            .build();
    btLeScanFilters.add(scanFilter);

2.初始化掃描設置

    btLeScanSettings = new ScanSettings.Builder().

setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build();

3.初始化掃描回調

   private ScanCallback leScanCallback = new ScanCallback() {

    @Override
    public void onScanResult(int callbackType,
                             final ScanResult result){

        new TPMSAsyncTask().execute(result);
    }
   }

4.開始掃描

    btLeScanner.startScan(btLeScanFilters, 
               btLeScanSettings,
               leScanCallback);
        
   

暫無
暫無

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

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