2016-10-10 6 views
0

Androidビーコンライブラリで領域を検出しようとすると、私は奇妙な動作をしています。Androidビーコンライブラリが存在しないヌル領域に入る

特定のIDを持つビーコンを監視する2つの領域を定義しました。

都合のよいときに、didEnterRegionコールバックが2回、予想される領域に対して1回、「null」領域に対してもう1回トリガーされます。 2番目の領域を入力すると、予想される領域に対して1回だけトリガーされます。

この動作は正常ですか?この「ヌル」領域では、どのようにトリガーしないようにすることができますか?ここで

は私がより良い何が起こっているかを示すために、印刷ログです:

10-10 18:07:15.683:11111111-1111-1111-1111-111111111111

:didEnterRegion呼び出し、ID1を手に入れました

10-10 18:07:15.693:ガットdidEnterRegion呼び出し、ID1:ID2ヌル:nullのID3:ヌル

10-10 18:07:22.946:ガットdidEnterRegion呼び出し、ID1:00000000-0000-0000 -0000-000000000000

10-10 18:07:41.8 80:07:57.913:didExitRegion 11111111-1111-1111-1111-111111111111

10-10 18を得たdidExitRegion

10-10 18:07 00000000-0000-0000-0000-000000000000

を得ました: 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ビーコンライブラリは、地域の監視を開始するたびに、Android搭載端末の不揮発性ストレージにこれらの領域を保存するので、再起動すると最後の地域の状態を覚えています。新しい地域エントリーイベント。

これらの古い領域を消去したい場合は、プログラム的に行う必要があります。 これは次のコードで修正できます。

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

お返事ありがとうございます。確かに、古いバージョンではリージョンが「ヌル」だったので意味があります。 しかし、あなたのコードをonCreateの中に追加しようとしましたが、明らかにmBeaconManager.getMonitoredRegions()はどの領域も返しませんでした。 mBeaconManager.removeAllMonitorNotifiers()を試してみましたが、成功しませんでした。 – luislhl

+0

リージョンはまだ復元されていないため、onCreate内にコードを配置することはできません。クイックフィックスの場合は、didEnterRegionコールバックの内側に配置してみてください。 – davidgyoung

+0

しかし、私がdidEnterRegionの中に置くと、onCreateで宣言した領域もクリアされませんか?私はテストし、起こっているように見えます。 – luislhl

関連する問題