我一直在扫描BLE设备。现在在android oreo中,操作系统会自动关闭服务,有没有一种方法可以在应用程序被杀死后进行扫描?
我已经探索过
1.)带有通知的前台服务用户体验不佳
2.)周期性作业调度效率低下
3.)使用无障碍服务,android会在不帮助残疾人的情况下清理使用它的应用程序,或者有没有办法事先获得批准?
如果我遗漏了什么让我知道
发布于 2018-06-13 07:04:28
对于全功率扫描,你的选项摘要是准确的。我写了一个blog post,权衡不同选项的利弊。
在Android Beacon Library中,我们默认选择使用JobScheduler。它最多每15分钟在后台运行一次。IMO,时间是这种方法的真正缺点。它的重量更重,效率更低,这一事实并不重要,因为作业启动只有15分钟一次。
该库最近还添加了支持,可以选择性地配置foreground service以更频繁地进行扫描。对于许多用例,持久通知是可以接受的,尽管这对其他用例来说是一个真正的缺点。
不幸的是,安卓没有白名单或特殊的审批流程来绕过这一限制。你唯一的选择是如果你是一家设备制造商,可以在你自己的定制安卓版本中自定义规则执行。
您没有提到Android Beacon Library使用的另一种方法是使用一个新的Android have,它可以让您通过intent to a BroadcastReceiver获得扫描结果。如果检测到特定兴趣的BLE数据包,这与扫描过滤器配合使用可以很好地唤醒您的应用程序。但一旦检测到一个。当这个扫描发生时,你的进程并没有运行,但是在发生这样的检测之后,它可以在Android 8上运行一个常规的10分钟限制的后台服务。下面的示例将结果传递给MyBroadcastReceiver。
Intent intent = new Intent(mContext, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
int result = bluetoothAdapter.getBluetoothLeScanner().startScan(filters, settings, pendingIntent);通过使用上述技术的组合,大多数蓝牙扫描应用程序仍然可以在Android 8+上很好地工作。
https://stackoverflow.com/questions/50825772
复制相似问题