2016-07-23 38 views
0

我目前在我的應用程序中註冊位置欄,與documentation中的解釋類似。使用日誌,我可以看到註冊回調和廣播接收器被正確調用。但是,如果我重新運行應用程序,這些不會被解僱。重新啓動手機後,它再次運作。柵欄未註冊 - 谷歌認知API

我不註銷籬笆,因爲我想籬笆甚至在後臺被解僱(接收者沒有綁定到活動)。

¿即使我在應用程序開發過程中多次重新運行應用程序,我如何才能使其工作? ¿當用戶重新安裝或更新應用程序時,如何確保護欄正確註冊?

我創建使用

AwarenessFence allLocations = AwarenessFence.or(locationFences); 

其中locationFences是這樣

singleLocationFence = LocationFence.entering(latitude, longitude, FENCE_RADIUS); 

回答

1

創建LocationFence對象的集合,我已經做了AwarenessFence柵欄處理的服務,因爲服務可以在後臺運行它工作正常。如果調用「onDestroy」,我曾經取消註冊柵欄,所以操作系統不再需要觀察這些柵欄。 該服務還解決了您的「重新運行」 - 問題,因爲它只能在一次服務。

您與

AwarenessFence allLocations = AwarenessFence.or(locationFences); 

其工作的下一個點,我有時間欄

AwarenessFence allLocations = AwarenessFence.or(TimeFence.inInterval(new Date()), Long.MAX_VALUE)); 

但試了更好的使用

AwarenessFence allLocations = locationFences; 

因爲AwarenessFence是所有BeaconFences的父母, Geofences,TimeFencee,(...)組成了Awareness API。

+0

您是如何管理服務中的圍欄處理的,我假設您正在使用intent服務? 我使用意圖服務的任何活動認可工作正常,但我有同樣的問題作爲@Nicolas上面這裏是我的堆棧發佈http://stackoverflow.com/questions/40163430/google-awareness-api-callback - 不返回狀態 –

+0

好的,我錯過的是取消註冊柵欄。但是,我不會讓它們附加到服務生命週期。當我更新他們(因爲數據庫的變化),我取消註冊現有的並立即註冊新的。 –

0

我知道,在您使用Awareness API註冊圍欄之後,即使您重新運行應用程序,或者如果應用程序位於後臺,您也希望收到回叫。 這個問題沒有澄清這一點,但我相信如果你正在關注文檔,你正在註冊broadcastreceiver dynamically

你可以實現你做你的廣播接收器的靜態註冊打算什麼加入something like this in the manifest file

<receiver android:name="MyReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED"> 
     </action> 
    </intent-filter> 
</receiver> 

這樣,你不需要註銷中的onDestroy()接收器,和你的應用程序將獲得如果您已註冊柵欄,即使應用程序已停止或更新,也會執行柵欄回調。