Android Bluetooth Le scanner stops after a time

前端 未结 1 1838
迷失自我
迷失自我 2021-02-13 19:25

I am runnning an app or service with a active Bluetooth LE scanner and showing scan results on Log console. If I lock the phone in a table and not touching anymore. After a time

1条回答
  •  囚心锁ツ
    2021-02-13 20:00

    Android 7.0 introduced a BLE scan timeout, where any scan running for 30 minutes or more is effectively stopped automatically and only resumed "opportunistically" which essentially means that if another process does a scan, it can get the results as well.

    You can see this by setting up code to start a Bluetooth LE scan and leave it running indefinitely. After exactly 30 minutes, the scan will stop, and you will see entries like this in LogCat:

    06-11 19:00:22.848  5123  5147 D BtGatt.ScanManager: clientIf set to scan opportunisticly: 6
    06-11 19:00:22.848  5123  5147 D BtGatt.ScanManager: configureRegularScanParams() - queue=1
    06-11 19:00:22.848  5123  5147 D BtGatt.ScanManager: configureRegularScanParams() - ScanSetting Scan mode=-1 mLastConfiguredScanSetting=2
    06-11 19:00:22.848  5123  5147 D BtGatt.ScanManager: configureRegularScanParams() - queue emtpy, scan stopped
    06-11 19:00:22.849  5123  5147 D BtGatt.ScanManager: stop scan
    

    You can see the code that does this in the AOSP source here:

    https://android.googlesource.com/platform/packages/apps/Bluetooth/+/android-7.0.0_r1/src/com/android/bluetooth/gatt/ScanManager.java#72

    A workaround for this is to not keep scans going that long. You can simply stop them and restart them periodically.

    0 讨论(0)
提交回复
热议问题