2015-02-09 1 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) ....

Смежные вопросы