2016-07-17 80 views
0

我見過一些例子來說明如何通過測距得到埃迪斯通燈塔的URL幀,而不是通過監測如何使用Android Beacon庫在監視模式下從Eddystone Beacon獲取網址?

beaconManager.setRangeNotifier(new RangeNotifier() { 
    @Override 
    public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 
     for (org.altbeacon.beacon.Beacon beacon: beacons) { 
      if (beacon.getServiceUuid() == 0xfeaa && beacon.getBeaconTypeCode() == 0x10) { 
       // This is a Eddystone-URL frame 
       String url = UrlBeaconUrlCompressor.uncompress(beacon.getId1().toByteArray()); 
       Log.d("Eddystone", "I see a beacon transmitting a url: " + url + 
         " approximately " + beacon.getDistance() + " meters away."); 
      } 
     } 
    } 
}); 

didRangeBeaconsInRegion有一個org.altbeacon.beacon.Beacon參數。但是對於監視didEnterRegion只有區域作爲參數。

@Override 
public void didEnterRegion(Region region) { 

} 

所以,我怎麼監測模式eddysone信的網址是什麼?可能嗎?

回答

1

您必須使用測距API讀取實際的標識符。儘管可以使用監視來檢測Eddystone-URL信標傳輸,但因爲該框架只有一個標識符(URL),所以您必須在知道該URL標識符(不是很有用)的基礎上進行監視,或者監視所有身份標識。

在後一種情況下,這產生的讀取識別符,因爲你描述的監視回調僅具有區域對象的問題。

解決方案是在您監控的同時範圍。範圍回調會爲您提供檢測到的信標的完整列表,並允許您訪問URL。

+0

我想創建附近的信標列表,並在離開時從列表中刪除它們。我只能想到這樣做,使用監控,將該URL添加到輸入列表中,並在退出時將其刪除。有沒有其他方法?或者這樣做的正確方法? – bman

+0

是的,您可以在通過測距找到特定檢測到的URL後開始監控 - 基於beacon.getId1()在測距回調中定義的區域。當您從監控中獲得退出回叫時,您知道單個信標已經消失。只要確保你將區域的刺激標識符設置爲獨特的東西,如beacon.getId1()。toSring() – davidgyoung

+0

這是怎麼做到的? ''beaconManager.startMonitoringBeaconsInRegion(新地區(beacon.getId1()。的toString(),NULL,NULL,NULL))'' – bman

相關問題