3

最近、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>

注意: これは、アプリがバックグラウンドで実行されているときに機能します。

4

2 に答える 2

6

ブレ。理解した。ここでのデビッド・ワッサーの答え:

BroadcastReceiverが機能していません

アプリが実行されていないときにブロードキャストが表示されない理由を説明します。「アプリケーションの管理」から強制終了したため、「停止」状態になりました(したがって、システムはデフォルトでブロードキャストから除外されます)。

アプリをインストールして起動し、デバイスの電源を切ってから再度電源を入れると、ブロードキャストを正しく受信しています。

于 2012-07-10T05:46:33.077 に答える
0

私は同じ問題を抱えていて、Android StudioからRUNボタンを実行するだけで修正しました。

デバッグモードでは機能しないと思います

于 2016-09-27T15:04:07.903 に答える