使用Android信标库更新扫描周期时出错

时间:2016-07-07 13:11:02

标签: ibeacon ibeacon-android android-ibeacon

我正在尝试使用android beacon库更改扫描周期。这是我的代码

 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()的回调

我认为即使我收到此错误,扫描周期的值也会发生变化,但我不确定

1 个答案:

答案 0 :(得分:0)

之后,您无法调用beaconManager.updateScanPeriods();来回复onBeaconServiceConnect(),否则您会收到问题中提到的错误。了解对信标扫描服务的bind()统计信息的调用,这不是即时的。当您拨打电话更新扫描周期时,如果服务尚未启动,它将失败 - 需要一两秒钟。

两个选项:

  • 移动代码以设置onBeaconServiceConnect()内的扫描周期。
  • 在调用bind()之前移动设置前景和后台扫描周期的代码,然后移除beaconManager.updateScanPeriods();行。如果在调用bind之前设置扫描周期,则会在服务启动时自动应用它们。