2016-09-13 66 views
6

我想要在Google Awareness API「fence」觸發時啓動BroadcastReceiver或IntentService(取決於最終處理需要多長時間)。例如,也許我想知道在一天當中有多少次激活一組信標柵欄(假設我將手機放在我身邊)。我發現的所有示例都顯示了在代碼中註冊廣播接收器,但我的理解是我需要在清單中註冊一個廣播接收器,以便操作系統在我的應用程序未運行時向其發送廣播。更重要的是,意圖ID似乎是一個自定義的,所以我想我必須通過代碼至少一次在操作系統註冊它?應用未運行時的Google Awareness Api事件

我在猜測我將不得不創建一個或多個測試應用程序,通過試驗和錯誤來弄清楚這一點,但是肯定會聽到任何已經嘗試過這種方法的人,並希望分享您的結果!

+0

你的問題是

public class MyFenceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { FenceState fenceState = FenceState.extract(intent); if (TextUtils.equals(fenceState.getFenceKey(), "geofence")) { switch(fenceState.getCurrentState()) { case FenceState.TRUE: break; case FenceState.FALSE: break; case FenceState.UNKNOWN: break; } } } } 

更多信息?你能否更具體一些? – hanif

回答

5

如果您在Manifest文件中指定BroadCastReceiver,這就足夠了。

即使聲明瞭清單<receiver>條目後,您也不一定需要在代碼中註冊它。只需考慮平臺如何處理僅在Manifest文件中註冊它的活動(如果不是我們得到ActivityNotFoundException),廣播也可以只在Manifest文件中註冊。

您需要聲明的接收器,如:

<receiver android:name=".MyFenceReceiver" > 
    <intent-filter> 
    <action android:name="android.intent.action.FENCE_RECEIVER_ACTION" /> 
    </intent-filter> 
</receiver> 

擴展廣播接收器類。在https://developer.android.com/guide/topics/manifest/receiver-element.html

+0

對,我得到了那麼多。獎勵這項努力的獎勵!我仍然堅持以持久的方式註冊圍欄。我最近沒有很多時間,但是我最後的測試表明,接收器在停止前只會被召喚幾次。所有的接收者都在乾杯吐司。接下來我會嘗試使用一個日誌文件。 –

+0

這是正確的意圖過濾器來攔截事件嗎?我沒有得到應用程序關閉時的事件... –

+0

@ZivKesten當應用程序未運行時,您沒有收到事件?這意味着當你的應用程序正確運行時你正在接收它們。所以這與您如何註冊廣播有關。我猜你沒有在Manifest文件中註冊它,而是在代碼中使用Activity上下文而不是Application上下文。一些代碼示例將有助於更好地理解您的情況。 – Kowshick

相關問題