2016-09-13 7 views
6

Google Awareness API「フェンス」が起動したときにBroadcastReceiverまたはIntentService(最終処理にかかる時間によって異なります)を開始します。たとえば、私は1日のうちに何回ビーコンフェンスを作動させたかを知りたいと思うかもしれません。私が見つけたすべての例では、コードで放送受信機を登録していることがわかりましたが、私のアプリが動作していない場合にOSが放送を送信するためには、放送受信機をマニフェストに登録する必要があります。さらに、インテントIDはカスタムIDのように見えるので、コードで少なくとも1回はOSに登録する必要があると思います。アプリが実行されていない間にGoogle Awareness APIイベントが発生する

私は試行錯誤でこれを理解するために1つ以上のテストアプリを作成しなければならないと思っていますが、これを試して結果を共有したいと思っている人から聞いていただければ幸いです。

+0

あなたの質問は何ですかhttps://developer.android.com/guide/topics/manifest/receiver-element.html

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>の項目を宣言しても、コードに登録する必要はありません。プラットフォームがどのようにアクティビティを処理できるか考えてみましょう。マニフェストファイルに登録するのは、ActivityNotFoundExceptionがなければ同じ方法です。ブロードキャストはManifestファイルにのみ登録することもできます。

あなたのような受信機を宣言する必要があります:

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

はBroadcastReceiverクラスを拡張します。

+0

そうです、私はそれを遠くに持っています。努力の恩恵を授与!私はまだフェンスを永続的な方法で登録することに悩まされています。私は最近それに多くの時間を持っていないが、私の最後のテストでは、受信機が停止する前に数回呼び出されることが示された。すべてのレシーバーがトーストをポップアップさせていた。次にログファイルを試してみます。 –

+0

awarnessイベントを傍受するための正しいインテントフィルタですか?アプリケーションがダウンしているときに私はイベントを取得していません... –

+0

@ZivKestenアプリケーションが実行されていないときにイベントを受信して​​いませんか?これは、アプリケーションが正常に動作しているときに受信していることを意味します。だから、それはあなたが放送のために登録した方法と関係しています。マニフェストファイルに登録していないのですが、コード内でアプリケーションコンテキストの代わりにアクティビティコンテキストを使用していると思います。いくつかのコードサンプルは、シナリオをより良く理解するのに役立ちます。 – Kowshick

関連する問題