最近、Google のヘルパー クラス (GCMBroadcastReceiver、GCMBaseIntentService) を使用して GCM メッセージングをアプリに追加しました。アプリがフォアグラウンドにあるときもそうでないときも、アプリの実行中に美しく機能します。ただし、実行されていないときは何も機能しません。
テストとして、GCMBroadcastReceiver を拡張し、ログ ステートメントを getGCMIntentServiceClassName() と peekService() に追加しました。アプリの実行中にメッセージが届くと、前者が呼び出されます。次に、OS がサービス クラスをインスタンス化し、最終的に onMessage() が呼び出されます。
アプリが実行されていない場合、 getGCMIntentServiceClassName() は呼び出されません。
私のマニフェストは、ほとんど Google の GCM の例の定型コードです。
アプリが実行されていないときに OS がアプリを起動し、メッセージが正しいインテント カテゴリで到着するために設定する必要がある追加のアクセス許可またはフラグはありますか? 私のレシーバーは次のように定義されています。
<receiver
android:name=".GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="PACKAGENAME" />
</intent-filter>
</receiver>
注意: これは、アプリがバックグラウンドで実行されているときに機能します。