0

我的应用程序中有 2 个接收器和 2 个用于 GCM 的 GCMIntentService 类;一个在我的应用程序中,另一个包含在我添加到我的应用程序的库中。当通过 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 回答