3

特にこの場合、インテントフィルターでカテゴリが実際に何をするのか、常にわかりません。

       <intent-filter>

            <!-- Receives the actual messages. -->
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <!-- Receives the registration id. -->
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="com.androidhive.pushnotifications" />
        </intent-filter>
4

2 に答える 2

4

のポイントは、<category>アプリ/パッケージ名に基づいて着信GCM通知をフィルタリングすることです。

GCMのドキュメントが表示<category android:name="my_app_package" />され、GCMを許可するには特定のアプリを登録する必要があるため、これは理にかなっています。

考えてみれば、AndroidデバイスにはGCMに登録されているアプリがいくつもあるかもしれません。すべてが同じコアソフトウェアを使用してメッセージを受信するという事実は、メッセージを正しいアプリに「ルーティング」する方法が必要であることを意味します-これを行う方法がなかった場合、GCMに登録されたすべてのアプリがそれぞれを受信します他の人のメッセージ。

于 2012-11-19T01:00:11.983 に答える
1

これらは、Google Cloud Messagingサービスで使用されるインテントです。これらのフィルタについては、CGM Getting Started ガイドのトピック「Writing the Android Application」を参照してください。主な情報は次のとおりです(特に最後の部分):

com.google.android.c2dm.intent.RECEIVEこのブロードキャスト レシーバーは、GCM (および)によって送信できる 2 つのインテントを処理する役割を担いcom.google.android.c2dm.intent.REGISTRATION、アプリケーションが実行されていない場合でもこれらのインテントを受信できるように、(プログラムではなく) マニフェストで定義する必要があります。パーミッションを設定するcom.google.android.c2dm.permission.SENDことで、GCM システム フレームワークによって送信されたインテントのみが受信者に送信されるようになります (通常のアプリケーションは、そのパーミッションでインテントを発行できません)。

カテゴリ タグの android:name は、アプリケーションのパッケージ名に置き換える必要があることに注意してください (カテゴリ タグは、minSdkVersion 16 以降を対象とするアプリケーションには必要ありません)。

于 2012-11-18T23:45:35.717 に答える