首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么当我再次运行应用程序时,信标需要很长时间才能识别设备?

为什么当我再次运行应用程序时,信标需要很长时间才能识别设备?
EN

Stack Overflow用户
提问于 2021-10-11 08:43:39
回答 1查看 38关注 0票数 0

目前,我正在使用altbeacon库开发一个信标识别功能。我设计了一个特定的活动,当设备使用didRangeBeaconsInRegion()函数接近信标时触发事件。

当我第一次运行应用程序时,它会立即识别信标并触发一个事件。然而,当应用程序关闭并再次打开时,或者当活动离开并再次返回时,会有大约20秒的延迟。

如果你检查日志,下面的代码每5秒重复一次。此代码必须出现4次才能识别信标。有没有一种方法可以减少这种延迟或者一次识别所有的信标?

代码语言:javascript
复制
ScanState says background mode for ScanJob is false
2021-10-11 17:20:32.623 I/BluetoothAdapter: STATE_ON
2021-10-11 17:20:32.624 I/BluetoothAdapter: STATE_ON
2021-10-11 17:20:32.624 I/BluetoothAdapter: STATE_ON
2021-10-11 17:20:32.624 D/BluetoothLeScanner: Start Scan with callback
2021-10-11 17:20:32.625 D/BluetoothLeScanner: onScannerRegistered() - status=6 scannerId=-1 mScannerId=0

我尝试了下面的代码来解决这个问题,但它没有解决我问的问题。

代码语言:javascript
复制
beaconManager.setForegroundScanPeriod(1100); 
beaconManager.setForegroundBetweenScanPeriod(0); 
beaconManager.setBackgroundScanPeriod(5000); 
beaconManager.setBackgroundBetweenScanPeriod(300000); 
代码语言:javascript
复制
private static Long sampleExpirationMilliseconds=3000L;
beaconManager.setRssiFilterImplClass(RunningAverageRssiFilter.class);
RunningAverageRssiFilter.setSampleExpirationMilliseconds(sampleExpirationMilliseconds);
EN

回答 1

Stack Overflow用户

发布于 2021-10-11 13:33:16

很难说到底是什么导致了这里的问题,因为您没有显示设置扫描的代码,以及设置扫描时的上下文(在从Android应用程序类启动新活动时,从Android服务启动)。

问题最有可能的原因是你的应用程序启动/停止扫描的方式,以及它与Android应用程序生命周期的交互方式。

以下是一些小贴士:

  1. 尝试Java reference application以确认您不再看到该问题。然后尝试复制设置扫描的代码,看看这是否解决了您的问题。

  1. 如果可能,只开始扫描一次,并且不要停止扫描。让库油门在应用程序处于后台时进行扫描,这样它就不会使用过多的电池。

  1. 接受默认设置(扫描周期、过期毫秒等)除非你真的知道自己在做什么。

  1. 使用库版本2.19+中的"autobind“API来启动监控或测距,如下所示:beaconManager.startRangingBeacons(...),并且不要直接调用bind(...)unbind(...)。调用绑定和解除绑定是导致编程错误的常见原因。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69523344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档