使用 Android 信标库更新扫描周期时出错
Error when updating the scan period with Android beacon Library
我正在尝试使用 android 信标库更改扫描周期。这是我的代码
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);
try {
beaconManager.setForegroundScanPeriod(50l); // 1100 mS
beaconManager.setForegroundBetweenScanPeriod(0l); // 0ms
beaconManager.updateScanPeriods();
}
catch (RemoteException e) {
Log.e("error", e.getMessage());
}
我尝试了不同的设备,但总是出现此错误
BeaconManager 未绑定到服务。调用 beaconManager.bind(BeaconConsumer consumer) 并等待回调到 onBeaconServiceConnect()
我认为即使出现此错误,扫描周期的值也会发生变化,但我不确定
您不能调用 beaconManager.updateScanPeriods();
直到 在 收到回调到 onBeaconServiceConnect()
之后,否则您会收到问题中提到的错误。了解对 bind()
的调用会启动信标扫描服务,这不是瞬时的。当您调用更新扫描周期时,如果服务尚未启动,它将失败——这需要一两秒钟。
两个选项:
- 移动代码以在
onBeaconServiceConnect()
. 内设置扫描周期
- 将调用前设置前台和后台扫描周期的代码移至
bind()
,然后删除beaconManager.updateScanPeriods();
行。如果您在调用绑定之前设置扫描周期,它们将在服务启动时自动应用。
我正在尝试使用 android 信标库更改扫描周期。这是我的代码
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);
try {
beaconManager.setForegroundScanPeriod(50l); // 1100 mS
beaconManager.setForegroundBetweenScanPeriod(0l); // 0ms
beaconManager.updateScanPeriods();
}
catch (RemoteException e) {
Log.e("error", e.getMessage());
}
我尝试了不同的设备,但总是出现此错误 BeaconManager 未绑定到服务。调用 beaconManager.bind(BeaconConsumer consumer) 并等待回调到 onBeaconServiceConnect()
我认为即使出现此错误,扫描周期的值也会发生变化,但我不确定
您不能调用 beaconManager.updateScanPeriods();
直到 在 收到回调到 onBeaconServiceConnect()
之后,否则您会收到问题中提到的错误。了解对 bind()
的调用会启动信标扫描服务,这不是瞬时的。当您调用更新扫描周期时,如果服务尚未启动,它将失败——这需要一两秒钟。
两个选项:
- 移动代码以在
onBeaconServiceConnect()
. 内设置扫描周期
- 将调用前设置前台和后台扫描周期的代码移至
bind()
,然后删除beaconManager.updateScanPeriods();
行。如果您在调用绑定之前设置扫描周期,它们将在服务启动时自动应用。