java– 如何在android oreo中运行常量后台服务?

java– 如何在android oreo中运行常量后台服务?,第1张

概述我正在不断扫描BLE设备.现在在androidoreo *** 作系统自动关闭服务,甚至在应用程序被杀后有没有办法扫描?我已经探索过了1.)带通知的前台服务[糟糕的用户体验]2.)定期工作时间表[效率低]3.)使用辅助功能服务[android扫描使用它的应用程序而不帮助残疾人]或者有没有办法事先得到批准?

我正在不断扫描BLE设备.现在在android oreo *** 作系统自动关闭服务,甚至在应用程序被杀后有没有办法扫描?

我已经探索过了
1.)带通知的前台服务[糟糕的用户体验]
2.)定期工作时间表[效率低]
3.)使用辅助功能服务[androID扫描使用它的应用程序而不帮助残疾人]或者有没有办法事先得到批准?

如果有什么我想念的东西让我知道

解决方法:

对于全功率扫描,您的选项摘要是准确的.我写了一篇关于这个的blog post,它衡量了不同选项的优缺点.

在@L_502_2@中,我们默认选择使用JobScheduler.这可以在后台运行最多每15分钟一次. IMO,时机是这种方法的真正缺点.如果作业启动仅每15分钟发生一次,那么它的重量更轻,效率更低这一事实并不重要.

该库最近还添加了支持,可选择配置foreground service以更频繁地启用扫描.对于许多用例,持久性通知是可以接受的,尽管它对其他用户来说是一个真正的缺点.

很遗憾,AndroID没有白名单或特殊审批流程来帮助您解决此限制.您唯一的选择是,如果您是设备制造商,并且可以在您自己的自定义AndroID版本中自定义规则实施.

您没有提到AndroID Beacon library使用的另一个选择是使用新的AndroID O API,它允许您通过意图将扫描结果传递给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上正常运行.

总结

以上是内存溢出为你收集整理的java – 如何在android oreo中运行常量后台服务?全部内容,希望文章能够帮你解决java – 如何在android oreo中运行常量后台服务?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1104724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存