2015-02-09 32 views
1

我用在我的項目Estimote/Android-SDK,我有一個問題。 當我來到該地區的燈塔Proximity.IMMEDIATE我發送請求到服務器,它旋轉我的結果。我不能讓事件只工作一次(BeaconManager.RangingListener())

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區域時,會不斷觸發此事件。我也需要讓這個活動只能工作一次。

回答

3

每秒鐘都會調用onBeaconsDiscovered,不僅在首次看到信標時。

如果下次不想觸發代碼,則需要使用像wasSomethingDone這樣的布爾型保護。它在執行代碼後被初始化爲false並設置爲true

然後只寫if (wasSomethingDone && beacon.getMinor()==22222 && Utils.computeProximity(beacon)== Utils.Proximity.IMMEDIATE) ...