GCM メッセージを受信する方法については、こちらをお読みください: http://developer.android.com/google/gcm/client.html - タイトルについて話しています: ダウンストリーム メッセージを受信します。注: WakefulBroadcastReceiver の使用は必須ではありません。サービスを必要としない比較的単純なアプリの場合は、通常の BroadcastReceiver で GCM メッセージをインターセプトし、そこで処理を行うことができます。GCM がブロードキャスト レシーバーの onReceive() メソッドに渡すインテントを取得したら、それをどうするかはユーザー次第です。
GCM メッセージを受信したら、そこからタイトルを抽出して通知領域に配置するだけで、ユーザーがクリックすると、特定のフラグメントでアプリが開きます。もちろん、そのメッセージが到着したときにデバイスがスリープ状態になっている可能性があります。
ブロードキャスト レシーバーの例は次のとおりです。
public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Explicitly specify that GcmIntentService will handle the intent.
ComponentName comp = new ComponentName(context.getPackageName(),
GcmIntentService.class.getName());
// Start the service, keeping the device awake while it is launching.
startWakefulService(context, (intent.setComponent(comp)));
setResultCode(Activity.RESULT_OK);
}
}
それで、ここにいくつかの質問があります:
1) ウェイクフル ブロードキャスト レシーバーは、メッセージが到着したときにデバイスがスリープ状態にならないようにしたり、デバイスを起動したりするためだけのものですか?
2) 通常のブロードキャスト レシーバーが必要か、ウェイクフル レシーバーが必要かはどうすればわかりますか?
3) 複数のブロードキャスト レシーバーがあると仮定すると、アプリはメッセージが到着したときにどれを使用するかをどのように認識しますか?
4) ブロードキャスト レシーバーのインテントを使用するインテント サービスを呼び出す代わりに、タイトルのみを抽出して通知領域に配置したい場合は、ブロードキャスト レシーバー自体の中でインテントを処理するだけでよいですか?