2016-10-10 2 views
0

У меня странное поведение при попытке обнаружить регионы с Android Beacon Library.Android Beacon Library, несущая несуществующий нулевой регион

Я определил 2 области для наблюдения за маяками с определенными идентификаторами.

Каждый раз, когда я не вхожу в какой-либо регион и вхожу в один, обратный вызов didEnterRegion запускается дважды, один раз для ожидаемой области и в другое время для области «нуль». Если я вхожу во второй регион, он запускается только один раз для ожидаемой области.

Это обычное поведение? Как я могу заставить его не запускать для этого «нулевого» региона?

Вот журнал, который я напечатал, чтобы лучше показать, что происходит:

10-10 18: 07: 15,683: Получил didEnterRegion вызов, id1: 11111111-1111-1111-1111-111111111111

10-10 18: 07: 15,693: Получил didEnterRegion вызова, ID1: нуль ID2: нуль id3: нуль

10-10 18: 07: 22,946: Получил didEnterRegion вызова, ID1: 00000000-0000-0000 -0000-000000000000

10-10 18: 07: 41.8 80: получил didExitRegion 11111111-1111-1111-1111-111111111111

10-10 18: 07: 57.913: получил didExitRegion 00000000-0000-0000-0000-000000000000

10-10 18:07: 57,914: есть didExitRegion нулевого

А вот часть моего кода:

public class BeaconReferenceApplication extends Application implements BootstrapNotifier { 
    private RegionBootstrap regionBootstrap; 

    public void onCreate() { 
     super.onCreate(); 

     // UPDATE: Trying to clear old regions. 
     BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this); 
     for (Region region: beaconManager.getMonitoredRegions()) { 
      Log.i(TAG, "Clearing old monitored region" + region); 
      try { 
       beaconManager.stopMonitoringBeaconsInRegion(region); 
      } catch (RemoteException e) { 
       e.printStackTrace(); 
      } 
     } 

     ArrayList<Identifier> ids1 = new ArrayList<>(1); 
     ids1.add(Identifier.parse("11111111-1111-1111-1111-111111111111")); 
     Region region1 = new Region("region1", ids1); 

     ArrayList<Identifier> ids0 = new ArrayList<>(1); 
     ids0.add(Identifier.parse("00000000-0000-0000-0000-000000000000")); 
     Region region0 = new Region("region0", ids0); 


     ArrayList<Region> regions = new ArrayList<>(2); 
     regions.add(region0); 
     regions.add(region1); 
     regionBootstrap = new RegionBootstrap(this, regions); 
    } 
    @Override 
    public void didEnterRegion(Region region) { 
     Log.i(TAG, "Got a didEnterRegion call, " + region); 
    } 
    @Override 
    public void didExitRegion(Region region) { 
     Log.i(TAG, "got a didExitRegion" + region.getId1()); 
    } 
} 

ответ

1

Я подозреваю, что происходит в том, что «нулевой» регион сохранялся более старой версией коды. Это произошло бы, когда более старая версия кода начала отслеживать этот регион.

Поймите, что всякий раз, когда вы начинаете мониторинг для региона, Android Beacon Library будет сохранять эти регионы в энергонезависимой памяти на вашем Android-устройстве, поэтому, когда она перезагружается, она запоминает последнее состояние региона и знает, событие ввода нового региона.

Следствием этого является то, что если вы когда-либо захотите очистить эти старые регионы, вы должны сделать это программно. Вы можете исправить это с помощью следующего кода:

// Stop monitoring all currently monitored regions 
    for (Region region: mBeaconManager.getMonitoredRegions()) { 
     mBeaconManager.stopMonitoringBeaconsInRegion(region); 
    }  ' 
+0

Спасибо за ответ. Действительно, у меня был «нулевой» Region в более старых версиях, поэтому он имеет смысл. Но я попытался добавить свой код внутри onCreate, и, видимо, mBeaconManager.getMonitoredRegions() не возвратил ни одного региона. Я также пробовал mBeaconManager.removeAllMonitorNotifiers(), без успеха. – luislhl

+0

Возможно, вы не можете поместить код внутри onCreate, потому что регионы еще не восстановлены ... для быстрого исправления попробуйте поместить его в обратный вызов didEnterRegion. – davidgyoung

+0

Но если я положил его внутрь didEnterRegion, разве он также не очистит регионы, которые я объявил в onCreate? Я тестировал, и это то, что, похоже, происходит. – luislhl

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