我是Android编程和Altbeacon库的新手。我可以设置我想要的信标,但是我需要处理该区域没有信标的情况,并显示一个对话框。我可以显示一个没有问题的对话框,但是我不知道如何捕获“在区域中找不到信标...帮助?!?!?”。
这是我的代码(从altbeacon示例中进行了一些修改)...
public void onBeaconServiceConnect() {
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
Beacon firstBeacon = beacons.iterator().next();
Log.i(TAG, "The first beacon I see is about " + beacons.iterator().next().getDistance() + " meters away."}
}
});
try {
Log.d(TAG, "setting up background monitoring for beacons and power saving");
// wake up the app when a beacon is seen
String uuid = "MYCUSTOM UUID STRING";
beaconManager.startRangingBeaconsInRegion(new Region(uuid, Identifier.parse(uuid), null, null));
}
catch (RemoteException e) { }
}
我认为另一种解决方案是只进行监视,但是我需要获取“主要”和“次要”值....我可以通过监视活动来做到这一点吗?
最佳答案
您可以将监视与测距结合起来,以便仍然可以获得信标标识符。检查以下代码(我更改了您的代码)。
public void onBeaconServiceConnect() {
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
Beacon firstBeacon = beacons.iterator().next();
Log.i(TAG, "The first beacon I see is about " + beacons.iterator().next().getDistance() + " meters away.");
}
}
});
beaconManager.setMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {
try {
beaconManager.startRangingBeaconsInRegion(region);
}
catch (RemoteException e) { }
}
@Override
public void didExitRegion(Region region) {
try {
beaconManager.stopRangingBeaconsInRegion(region);
}
catch (RemoteException e) { }
}
});
try {
Log.d(TAG, "setting up background monitoring for beacons and power saving");
// wake up the app when a beacon is seen
String uuid = "MYCUSTOM UUID STRING";
beaconManager.startMonitoringBeaconsInRegion(new Region(uuid, Identifier.parse(uuid), null, null));
}
catch (RemoteException e) { }
}
这样,使用
didEnterRegion
,您可以检查信标是否已进入您的区域,而使用didExitRegion
,只要周围没有信标,您就可以获取信号(当然使用区域过滤器)。但是,使用这种方法,如果在第一次启动监视时周围没有信标,您将无法获得事件。为此,您可以设置一个计时器并在
didEnterRegion
中设置一个标志。如果未在所需时间内设置该标志,则可以确保周围没有信标。除了第一次,这种方法应该可以解决您的问题。