-1

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) ブロードキャスト レシーバーのインテントを使用するインテント サービスを呼び出す代わりに、タイトルのみを抽出して通知領域に配置したい場合は、ブロードキャスト レシーバー自体の中でインテントを処理するだけでよいですか?

4

1 に答える 1

0

1) ウェイクフル ブロードキャスト レシーバーは、メッセージが到着したときにデバイスがスリープ状態にならないようにしたり、デバイスを起動したりするためだけのものですか?

デバイスがスリープ状態になるのを防ぐためだけに。

2) 通常のブロードキャスト レシーバーが必要か、ウェイクフル レシーバーが必要かはどうすればわかりますか?

あまりにも多くの作業を行う場合はintentService、レシーバーが UI スレッドで呼び出されるため、使用する必要があります。作業中に CPU を稼働させておきたい場合は、wakeful を使用します。一般に、この状況で放送受信機からサービスを呼び出したときに、CPU が再びスリープ状態にならないという保証はありません。そのため、常に を使用してwakefulください。

3) 複数のブロードキャスト レシーバーがあると仮定すると、アプリはメッセージが到着したときにどれを使用するかをどのように認識しますか?

マニフェストのレシーバーのインテント フィルターから:

    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="com.example" />
    </intent-filter>

4) ブロードキャスト レシーバーのインテントを使用するインテント サービスを呼び出す代わりに、タイトルのみを抽出して通知領域に入れたい場合は、ブロードキャスト レシーバー自体でインテントを処理する必要がありますか?

はい、時間がかからないのでできます。onReciveまた、メソッドの実行中に CPU がスリープ状態にならないことも保証されています。broadCastReciever.

于 2015-03-04T10:12:00.073 に答える