簡體   English   中英

柵欄未注冊-Google感知API

[英]Fences not registering - google awareness API

我目前正在我的應用程序上注冊位置圍欄,類似於文檔中的解釋。 使用日志,我可以看到正在正確地調用注冊回調和廣播接收器。 但是,如果我重新運行該應用程序,則不會觸發這些應用程序。 重新啟動手機后,它可以再次工作。

我之所以沒有注銷圍欄,是因為我希望即使在后台也要觸發圍欄(接收者未綁定到“活動”)。

¿即使我在應用程序開發期間多次重新運行應用程序,也如何使它正常工作? ¿當用戶重新安裝或更新應用程序時,如何確保圍欄已正確注冊?

我使用創建AwarenessFence

AwarenessFence allLocations = AwarenessFence.or(locationFences);

其中locationFences是這樣創建的LocationFence對象的集合

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

我已經在服務中完成了隔離處理,由於服務可以在后台運行,因此可以正常工作。 如果調用了“ onDestroy”,則我通常會取消注冊圍欄,因此操作系統將不再需要觀察這些圍欄。 該服務還解決了您的“重新運行”問題,因為它一次只能使用。

您的下一點

AwarenessFence allLocations = AwarenessFence.or(locationFences);

它的工作,我嘗試與一個TimeFence

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

但是更好的使用

AwarenessFence allLocations = locationFences;

因為AwarenessFence是所有BeaconFence,Geofence,TimeFencee的父級,所以(...)組成Awareness API。

我了解到,使用Awareness API注冊籬笆后,即使您重新運行該應用程序,或者該應用程序在后台,您也希望收到回調。 這個問題並不能澄清這一點,但是我相信,如果您關注文檔,那么您是在動態注冊broadcastreceiver。

您可以通過在清單文件中添加類似以下內容的靜態注冊廣播接收器來實現您的預​​期目標:

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

這樣,您無需在onDestroy()中注銷接收器,並且即使您已停止注冊或更新應用程序,您的應用程序也將獲得隔離器回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM