Сканирование BLE в фоновом режиме? - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь запустить фоновый сервис, который постоянно работает и сканирует рекламные объявления BLE.

Я запустил службу. Работает как положено и работает все время. При перезапуске фоновой службы (после закрытия действия) я запускаю сканирование BLE:

mBluetoothLeScanner = BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner();

        ScanFilter.Builder builder = new ScanFilter.Builder();
        builder.setManufacturerData(0x0590,new byte[]{});
        ScanFilter filter = builder.build();
        filters = new ArrayList<ScanFilter>();
        filters.add( filter );
        ScanSettings settings = new ScanSettings.Builder()
                .setScanMode( ScanSettings.SCAN_MODE_LOW_LATENCY )
                .build();
  //      mBluetoothLeScanner.stopScan(mScanCallback);
        mBluetoothLeScanner.startScan(filters, settings, mScanCallback);

Работает 30-50 секунд. По истечении этого времени обратный вызов сканирования не отправляет рекламные данные.

Ты хоть представляешь, почему он остановлен и что я могу сделать? IBeacon или Eddystone - лучшее решение? Мое намерение состоит в том, чтобы постоянно слушать сообщение от устройства BLE в фоновом режиме, пока приложение закрыто. Я использую Android 8.1 с Xiaomi Redmi 5.

1 Ответ

0 голосов
/ 22 апреля 2019

После Android 8 Google добавить немного Фоновые ограничения вы можете прочитать его

Как я знаю, у вас есть два варианта один использовать JobScheduler другой способ использования ForgroundServices (я использую это)

...