使用 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();行。如果您在调用绑定之前设置扫描周期,它们将在服务启动时自动应用。