我不能让事件只工作一次(BeaconManager.RangingListener())

时间:2015-02-09 09:51:08

标签: android estimote

我在我的项目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区域时,这个事件会不断被触发。我还需要让这个活动只运作一次。

1 个答案:

答案 0 :(得分:3)

每秒都会调用回调onBeaconsDiscovered,而不仅仅是在第一次看到信标时。

如果下次不想触发代码,则需要使用像wasSomethingDone这样的布尔保护。它被初始化为false,并在您的代码执行后设置为true

然后写下if (wasSomethingDone && beacon.getMinor()==22222 && Utils.computeProximity(beacon)== Utils.Proximity.IMMEDIATE) ...