Android 信标库进入不存在的空区域
Android Beacon Library entering non-existent null region
我在尝试使用 Android 信标库检测区域时遇到了一个奇怪的行为。
我定义了 2 个区域来监视具有特定 ID 的信标。
每次我不在任何区域并进入一个区域时,都会触发两次didEnterRegion 回调,一次针对预期区域,另一次针对'null' 区域。
如果我进入第二个区域,它只会针对预期区域触发一次。
这种行为正常吗?我怎样才能让它不触发这个 'null' 区域?
这是我打印的日志,以更好地显示正在发生的事情:
10-10 18:07:15.683: Got a didEnterRegion call, id1: 11111111-1111-1111-1111-111111111111
10-10 18:07:15.693: Got a didEnterRegion call, id1: null id2: null id3: null
10-10 18:07:22.946: Got a didEnterRegion call, id1: 00000000-0000-0000-0000-000000000000
10-10 18:07:41.880: got a didExitRegion 11111111-1111-1111-1111-111111111111
10-10 18:07:57.913: got a didExitRegion 00000000-0000-0000-0000-000000000000
10-10 18:07:57.914: got a didExitRegion null
这是我的部分代码:
public class BeaconReferenceApplication extends Application implements BootstrapNotifier {
private RegionBootstrap regionBootstrap;
public void onCreate() {
super.onCreate();
// UPDATE: Trying to clear old regions.
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
for (Region region: beaconManager.getMonitoredRegions()) {
Log.i(TAG, "Clearing old monitored region" + region);
try {
beaconManager.stopMonitoringBeaconsInRegion(region);
} catch (RemoteException e) {
e.printStackTrace();
}
}
ArrayList<Identifier> ids1 = new ArrayList<>(1);
ids1.add(Identifier.parse("11111111-1111-1111-1111-111111111111"));
Region region1 = new Region("region1", ids1);
ArrayList<Identifier> ids0 = new ArrayList<>(1);
ids0.add(Identifier.parse("00000000-0000-0000-0000-000000000000"));
Region region0 = new Region("region0", ids0);
ArrayList<Region> regions = new ArrayList<>(2);
regions.add(region0);
regions.add(region1);
regionBootstrap = new RegionBootstrap(this, regions);
}
@Override
public void didEnterRegion(Region region) {
Log.i(TAG, "Got a didEnterRegion call, " + region);
}
@Override
public void didExitRegion(Region region) {
Log.i(TAG, "got a didExitRegion" + region.getId1());
}
}
我怀疑发生的事情是 "null" 区域由您的代码的旧版本保留。 当旧代码版本开始监视时会发生这种情况对于那个地区。
了解每当您开始监视某个区域时,Android 信标库会将这些区域保存到您的 Android 设备上的非易失性存储中,因此当它重新启动时,它会记住最后一次区域状态,它知道是否触发新的区域进入事件。
这样做的结果是,如果您想清除那些旧区域,则必须以编程方式进行。 您可以使用以下代码解决此问题:
// Stop monitoring all currently monitored regions
for (Region region: mBeaconManager.getMonitoredRegions()) {
mBeaconManager.stopMonitoringBeaconsInRegion(region);
} '
我在尝试使用 Android 信标库检测区域时遇到了一个奇怪的行为。
我定义了 2 个区域来监视具有特定 ID 的信标。
每次我不在任何区域并进入一个区域时,都会触发两次didEnterRegion 回调,一次针对预期区域,另一次针对'null' 区域。 如果我进入第二个区域,它只会针对预期区域触发一次。
这种行为正常吗?我怎样才能让它不触发这个 'null' 区域?
这是我打印的日志,以更好地显示正在发生的事情:
10-10 18:07:15.683: Got a didEnterRegion call, id1: 11111111-1111-1111-1111-111111111111
10-10 18:07:15.693: Got a didEnterRegion call, id1: null id2: null id3: null
10-10 18:07:22.946: Got a didEnterRegion call, id1: 00000000-0000-0000-0000-000000000000
10-10 18:07:41.880: got a didExitRegion 11111111-1111-1111-1111-111111111111
10-10 18:07:57.913: got a didExitRegion 00000000-0000-0000-0000-000000000000
10-10 18:07:57.914: got a didExitRegion null
这是我的部分代码:
public class BeaconReferenceApplication extends Application implements BootstrapNotifier {
private RegionBootstrap regionBootstrap;
public void onCreate() {
super.onCreate();
// UPDATE: Trying to clear old regions.
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
for (Region region: beaconManager.getMonitoredRegions()) {
Log.i(TAG, "Clearing old monitored region" + region);
try {
beaconManager.stopMonitoringBeaconsInRegion(region);
} catch (RemoteException e) {
e.printStackTrace();
}
}
ArrayList<Identifier> ids1 = new ArrayList<>(1);
ids1.add(Identifier.parse("11111111-1111-1111-1111-111111111111"));
Region region1 = new Region("region1", ids1);
ArrayList<Identifier> ids0 = new ArrayList<>(1);
ids0.add(Identifier.parse("00000000-0000-0000-0000-000000000000"));
Region region0 = new Region("region0", ids0);
ArrayList<Region> regions = new ArrayList<>(2);
regions.add(region0);
regions.add(region1);
regionBootstrap = new RegionBootstrap(this, regions);
}
@Override
public void didEnterRegion(Region region) {
Log.i(TAG, "Got a didEnterRegion call, " + region);
}
@Override
public void didExitRegion(Region region) {
Log.i(TAG, "got a didExitRegion" + region.getId1());
}
}
我怀疑发生的事情是 "null" 区域由您的代码的旧版本保留。 当旧代码版本开始监视时会发生这种情况对于那个地区。
了解每当您开始监视某个区域时,Android 信标库会将这些区域保存到您的 Android 设备上的非易失性存储中,因此当它重新启动时,它会记住最后一次区域状态,它知道是否触发新的区域进入事件。
这样做的结果是,如果您想清除那些旧区域,则必须以编程方式进行。 您可以使用以下代码解决此问题:
// Stop monitoring all currently monitored regions
for (Region region: mBeaconManager.getMonitoredRegions()) {
mBeaconManager.stopMonitoringBeaconsInRegion(region);
} '