6

Google Awareness API の「フェンス」が起動したときに、BroadcastReceiver または IntentService (最終的な処理にかかる時間に応じて) を開始したいと考えています。たとえば、1 日のうちに一連のビーコン フェンスをアクティブにした回数を知りたいと思うかもしれません (携帯電話を持ち歩いていると仮定します)。私が見つけたすべての例は、コードでブロードキャスト レシーバーを登録することを示していますが、アプリが実行されていない場合に OS がブロードキャストを送信するには、マニフェストにブロードキャスト レシーバーを登録する必要があることを理解しています。さらに、インテント ID はカスタム ID のように見えるので、コードを介して少なくとも 1 回は OS に登録する必要があると思いますか?

試行錯誤によってこれを理解するために、1 つ以上のテスト アプリを作成する必要があると思いますが、これを試して結果を共有したい人からの連絡をお待ちしております。

4

1 に答える 1

5

マニフェスト ファイルで BroadCastReceiver を指定するだけで十分です。

<receiver>マニフェストエントリを宣言した後でも、コードに登録する必要はありません。プラットフォームがアクティビティをどのように処理できるかを考えてみてください。アクティビティをマニフェスト ファイルにのみ登録します (ActivityNotFoundException が発生しない場合)。ブロードキャストもマニフェスト ファイルにのみ登録できます。

次のように受信者を宣言する必要があります。

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

BroadcastReceiver クラスを拡張します。

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;
        }
    }
}
}

https://developer.android.com/guide/topics/manifest/receiver-element.htmlの詳細情報

于 2016-10-05T21:14:50.367 に答える