android - altbeacon [2.19]+ 如何在 startRangingBeacons(region) 和 stopRangingBeacons(region) 中关闭自动绑定
问题描述
自“2.18”版本以来,我一直在使用这个库。
我必须让信标扫描在后台工作,我使用前台服务来做到这一点。但是电池问题很严重。尽管设置了扫描周期,但信标经常被遗漏。因此,我使用“startRangingBeaconsInRegion”和“stopRangingBeaconsInRegion”的功能清楚地打开它。
直到现在我才开始迁移到最新版本,而那个最新版本让我现在很困难。这是因为在启动和停止中使用了“自动绑定”功能。它杀死并创建前台服务。在使用“stopRangingBeacons(region)”功能后,只要使用“startRangingBeacons(region)”功能,警报就会一直响起。
有没有办法打开/关闭仅扫描?或者有没有办法关闭自动绑定?
请告诉我。
参考:https ://altbeacon.github.io/android-beacon-library/autobind.html
解决方案
AndroidBeaconLibrary 允许在后台进行 BLE 信标扫描,包括多种技术,包括可选使用 Android“前台服务”以允许在后台进行扩展的无限期扫描。该库提供了一个内置的前台服务,使这很容易做到。配置后,前台服务以这种方式工作:
- 每当您开始测距或监控至少一个区域时,前台服务就会启动,并且手机上会显示一条通知,指示扫描服务正在运行。
- 每当你停止对所有区域进行测距和监控时,前台服务就会停止,通知也会消失。
OP 询问应用程序想要重复启动和停止测距信标但不希望前台服务通知闪烁 on 和 off 的情况。2.19 之前的库版本通过手动服务绑定实现了这一点,但在 2.19+ 中不推荐使用手动服务绑定,因为它是错误、崩溃和开发人员沮丧的常见来源。
为了在库版本 2.19+ 上使用自动绑定范围达到相同的效果,您有几个选项:
设置
beaconManager.setIntentScanningStrategyEnabled(true)
将使用基于意图的后台扫描而不是前台服务。请参阅此处使用此选项,库永远不会显示前台服务通知(如果需要,您可以构建自己的前台服务)。但是,您可能会发现这会消耗太多电池,因为它会不断扫描。永远不要打电话
stopRangingBeacons(region)
。相反,将扫描周期之间的时间更改为非常大的值,如下所示:beaconManager.setBackgroundBetweenScanPeriod(360000000L) /* 10 hours*/
后跟beaconManager.updateScanPeriods()
. 然后,当您想恢复扫描时,将其设置回其正常值。构建您自己的前台服务,以便您完全控制通知的出现和消失。与图书馆的前台服务共享相同的通知,因此即使图书馆的前台服务停止,您的自定义前台服务也会继续显示通知。
推荐阅读
- h2o - H2O Flow 日期问题和拆分
- mysql - 是否可以将 MySQL 与 Power BI 报表服务器连接?
- r - 如何组合两个不同大小的数据框?
- django - 如何将主键从一个模型传递到另一个模型并在模板中显示第一个模型的某些字段?
- loops - 在 vscode 扩展中迭代`context.subscriptions`
- html - 将 iframe 视频拉伸超过最大屏幕宽度,找不到隐藏溢出的方法
- java - 如何根据键从MongoDb中的嵌套json中获取数据列表?
- html - 移动版网站时将菜单项移至底部
- r - 如何修复“$ 运算符对原子向量无效”/正确加载数据集?
- angularjs - 如何使用 ng-click AngularJS 直接更新字段