0

これらのメソッドが非推奨であることはわかっていますが、新しい GCM API にはバグがあるように思われるため、Google によって安定したバージョンがプッシュされるまで、これらのメソッドに戻します。

マニフェスト内でこのレシーバーを宣言しています。

        <receiver
        android:name="com.google.android.gcm.GCMBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <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.myApp" />
        </intent-filter>
    </receiver>

  <service android:name=".GCMIntentService" />

そして、GCMIntentService クラス内に onMessage() メソッドがあります。

   @Override
protected void onMessage(Context context, Intent intent) 
{
    Log.i(TAG, "Received message");
    String message = intent.getExtras().getString("msg");
}

1. ただし、メッセージを受信すると、このメソッドが呼び出されることはありません。なんで ?

さらに、私が従う例では以下を使用しています。

registerReceiver(mHandleMessageReceiver, new IntentFilter("intent_filter_string"));

次のクラスに関連付けられています。

private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() 
   {
    @Override
    public void onReceive(Context context, Intent intent) 
   {
        String newMessage = intent.getExtras().getString("data");
    }
 };

これは onPause 内で登録解除されます。

  1. このブロードキャスト レシーバーを作成する必要があるのはなぜですか?
  2. マニフェストでこれを行うことはできませんか?
  3. これは GCMIntentService クラス内の onMessage() で既にカバーされていませんか?
  4. Pending Intent String はどのような役割を果たしますか?

回答をお待ちしております。

4

2 に答える 2

0

アプリとデバイスの組み合わせを GCm プロジェクトに登録しましたか? onRegistered メソッドで最初にそれを行う必要があります。必要な権限をすべて追加しましたか? Google は、Android 4.0 より上のカスタム アクセス許可を追加する必要はないと言っていますが、私のアプリはそれなしでは機能しませんでした。GCM で作業するためのより簡単な方法を探している場合は、apiOmat をお勧めします: http://www.apiomat.com 私は、サービスとしてのバックエンドを知っています。ただし、アプリが小さい場合は、何も支払う必要はなく、はるかに簡単です。

于 2013-08-26T08:11:43.850 に答える