0

私のアプリケーションには、GCM 用の 2 つのレシーバーと 2 つの GCMIntentService クラスがあります。1 つはアプリ内にあり、もう 1 つはアプリケーションに追加したライブラリに含まれています。GCM を介してメッセージを受信したとき。受信したメッセージがどのインテントサービスを対象としているかを特定し、正しい受信者にそれを処理させる方法をいくつか知りたいと思います。私の意図していない場合、結果を次の受信者に伝播することをここで提案した人も いましたが、私はそれを行うことができませんでした。誰かがそれを手伝ってくれたら本当にありがたいです。

4

1 に答える 1

0

わかりました私はそれを解決することができました。@Eran の助けに感謝します。非推奨の GCM API を使用していました。GCMBroadcastReceiver のデフォルトの実装には

    setResult(Activity.RESULT_OK, null /* data */, null /* extra */); 

onReceive() メソッドで。これにより、結果が次の受信者に渡されるのを防ぐことができます。onReceive メソッドをオーバーライドしようとしましたが、最終的なものであり、オーバーライドできませんでした。そこで、新しい GoogleCloudMessaging api に切り替え、カスタム ブロードキャスト レシーバーを定義し、その onReceive() メソッドで次のようにしました。

    @Override
    public void onReceive(Context context, Intent intent) {

        String message = intent.getExtras().getString("identifier_tag");

        // ignore if message not intended for us
        if (message == null) {
            setResultCode(Activity.RESULT_OK);
            return;
        }
        if (!message.equals(IDENTIFIER_TAG)) {
            setResultCode(Activity.RESULT_OK);
            return;
        }


        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)));

        // message has been handled; do not propagate
        setResult(Activity.RESULT_OK, null, null);

} 

私がしたことは、受信したメッセージが私宛てのものかどうかを確認することでした。はいの場合、インテント サービスと setResult(Activity.RESULT_OK, null, null); を呼び出します。メッセージが他の受信者に渡されるのを防ぎます。メッセージが私宛てのものでない場合は、次の受信者に渡します。マニフェスト ファイルでも、この受信者の優先度を高く設定して、最初にメッセージを確実に受信できるようにします。

于 2013-10-28T08:18:03.063 に答える