我正在尝试运行一个始终运行的后台服务,并扫描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与小米Redmi 5配合使用。
答案 0 :(得分:0)
在android 8 google之后添加一些Background limits,您可以阅读
我知道您有两种选择,一种是使用 JobScheduler ,另一种是使用 ForgroundServices (我使用此方法)