これらのメソッドが非推奨であることはわかっていますが、新しい 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 内で登録解除されます。
- このブロードキャスト レシーバーを作成する必要があるのはなぜですか?
- マニフェストでこれを行うことはできませんか?
- これは GCMIntentService クラス内の onMessage() で既にカバーされていませんか?
- Pending Intent String はどのような役割を果たしますか?
回答をお待ちしております。