Androidプロジェクトでプッシュ通知(GCM)を使用しています。
GCMチュートリアルによると、私は放送受信機を実装し、それを_AndroidManifest.xml
_に登録しました。
この種のブロードキャストレシーバーは、アプリが閉じている場合でも(アプリがバックグラウンドにある場合だけでなく、アプリが強制的に停止されている場合でも)メッセージを受信する必要があります。
しかし、それは私が期待するようには機能しません。アプリが閉じている場合、onReceive()
メソッドは呼び出されません。放送受信機についての私の理解は正しいようで、問題はGCMに対する私の期待にあります。
考えられる理由の1つは、アプリが閉じている場合、Googleサーバーがデバイスに通知を送信しないことです。それで、私のアプリがメッセージを受信できるのは正しいですか(そしてonReceive()
メソッドはブロードキャストレシーバーで呼び出されます)、実行中またはバックグラウンド(ただし閉じられていない)の場合のみですか?
前もって感謝します。
この種のブロードキャストレシーバーは、アプリが閉じている場合でも(アプリがバックグラウンドにある場合だけでなく、アプリが強制的に停止されている場合でも)メッセージを受信する必要があります。
ユーザーがアプリを[設定]から強制停止した場合、コードは二度と実行されないとなり、何かがコンポーネントの1つを手動で実行するまで、通常はユーザーが手動でアクティビティを起動します(Android 3.1)。したがって、ユーザーが[設定]からアプリを強制的に停止した場合、新しいデバイス/エミュレーターでGCMメッセージを受信することはありません。
それで、私のアプリが実行中またはバックグラウンドで(ただし閉じられていない)場合にのみ、メッセージを受信できる(そしてonReceive()メソッドがブロードキャストレシーバーで呼び出される)のは正しいことですか?
Androidアプリケーションの観点からは、「クローズ」の概念はありません。「クローズ」とは、「実行中のプロセスがなく、最後のプロセスが正常に終了した」という意味の場合、「はい」です。 、GCMメッセージやその他のブロードキャストを受信する必要がありますが、ここでも強制停止は「正常に終了」しません。
フランチェスコ・ネリエリによると このAndroid-gcmスレッド :
そのため、アプリを強制停止した場合、ICSの意図された動作は、アプリがメッセージを受信しないようにすることです。これは、JBではGCMもアプリの登録を解除することを意味します。これは不幸な動作であり、これを変更するよう取り組んでいます(JBの登録解除部分)。
documentation では、
Androidデバイス上のAndroidアプリケーションは、メッセージを受信するために実行されている必要はありません。アプリケーションが適切なブロードキャストレシーバーと権限でセットアップされている限り、システムはメッセージが到着したときにインテントブロードキャストを介してAndroidアプリケーションをウェイクアップします。
ブロードキャストレシーバーの実装と権限を確認します。