我在我的项目Estimote/Android-SDK
中使用,我遇到了问题。
当我来到区域Proximity.IMMEDIATE
的灯塔时,我向服务器发送请求,这会转动我的结果。
beaconManager.setRangingListener(new BeaconManager.RangingListener() {
@Override
public void onBeaconsDiscovered(final Region region, final List<Beacon> beacons) {
runOnUiThread(new Runnable() {
@Override
public void run() {
getSupportActionBar().setSubtitle("Found beacons: " + beacons.size());
adapter.replaceWith(beacons);
for (Beacon beacon : beacons){
if (beacon.getMinor()==22222 && Utils.computeProximity(beacon)== Utils.Proximity.IMMEDIATE){
String android_id = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID);
UserApiConnector.me().getQueue(android_id);
}
}
}
});
}
});
它有效。
但问题是当我在Proximity.IMMEDIATE
区域时,这个事件会不断被触发。我还需要让这个活动只运作一次。
答案 0 :(得分:3)
每秒都会调用回调onBeaconsDiscovered
,而不仅仅是在第一次看到信标时。
如果下次不想触发代码,则需要使用像wasSomethingDone
这样的布尔保护。它被初始化为false
,并在您的代码执行后设置为true
。
然后写下if (wasSomethingDone && beacon.getMinor()==22222 && Utils.computeProximity(beacon)== Utils.Proximity.IMMEDIATE) ...
。