2017-09-16 107 views
0

我使用AltBeacon庫來檢測iBeacon設備。這是我使用的代碼,基於AltBeacon的文檔,但沒有檢測到信標:使用Android上的AltBeacon庫檢測iBeacon

beaconManager = BeaconManager.getInstanceForApplication(this); 
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")); 
beaconManager.bind(this); 
beaconManager.addMonitorNotifier(new MonitorNotifier() { 
     @Override 
     public void didEnterRegion(Region region) { 
      Log.i("test", "I just saw an beacon for the first time!"); 
     } 

     @Override 
     public void didExitRegion(Region region) { 
      Log.i("test", "I no longer see an beacon"); 
     } 

     @Override 
     public void didDetermineStateForRegion(int state, Region region) { 
      Log.i("test", "I have just switched from seeing/not seeing beacons: "+state); 
     } 
    }); 

try { 
    beaconManager.startMonitoringBeaconsInRegion(new Region("e2c56db5-dffb-48d2-b060-d0f5a71096e0", null, null, null)); 
} catch (RemoteException e) { } 

這段代碼錯了嗎?

回答

0

兩個問題:

問題1:

當你調用beaconManager.bind(this);封裝類必須是BeaconConsumer一個實例(和一般的ApplicationActivity一個實例,否則你需要鏈BeaconConsumer方法。)

關鍵的一點是,你可能只調用此塊:

try { beaconManager.startMonitoringBeaconsInRegion(new Region("e2c56db5-dffb-48d2-b060-d0f5a71096e0", null, null, null)); } catch (RemoteException e) { }

收到回撥給onBeaconServicecConnected後。這段代碼通常應該在回調中。因爲異常塊是空的並且什麼都不記錄,所以我懷疑這個代碼拋出了這個異常,並且失敗了。您應該至少在異常塊中記錄一個錯誤,以幫助找到像這樣的問題。

問題2:

對區域的構造應該是這樣的:

new Region("com.mydomain.myapp.region1", Identifier.parse("e2c56db5-dffb-48d2-b060-d0f5a71096e0"), null, null);

注意,第一個參數是作爲一個唯一的標識符該地區的一個字符串,以便以後可以使用相同的標識符來停止或替換正在監控的區域。第二個參數是ProximityUUID,第三個和第四個參數分別是主要和次要參數。

標識符所示應該工作的代碼構成,因爲它定義了「e2c56db5-dffb-48d2-B060-d0f5a71096e0」與ProximityUUID /其均爲空,因此通配符主要/次要值的唯一ID的方式。然而,這是誤導性的,因爲它表明它不是在尋找特定的ProximityUUID。

+0

我的活動實際上實現了BeaconConsumer事實上的代碼編譯沒有問題。 現在我已經修改了代碼: 'beaconManager.startMonitoringBeaconsInRegion(新區域( 「com.example.app.region1」, Identifier.parse( 「e2c56db5-dffb-48d2-B060-d0f5a71096e0」),空, null));' 但仍然無法正常工作。 另外我已經在try/catch塊中添加了一個日誌,並且代碼沒有失敗。任何解決方案 – Loris

+0

此外,當我第一次啓動應用程序時,事件'didDetermineStateForRegion'被觸發,狀態參數爲0 – Loris

+0

您是否獲得了onBeaconServiceConnected的回調? – davidgyoung

相關問題