将结果传播到android中的下一个BroadcastReceiver

时间:2013-10-22 14:00:19

标签: android google-cloud-messaging

我的应用程序中有2个接收器和2个GCMIntentService类用于GCM;一个在我的应用程序中,另一个包含在我已添加到我的应用程序的库中。当通过GCM收到消息时;我想知道如何识别收到的消息所针对的意图服务,并让正确的接收者处理它。有人建议here将结果传播到下一个接收器,如果它不是我的意图,但我无法设法做到这一点。如果有人可以帮助我,我真的很感激。

1 个答案:

答案 0 :(得分: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);

} 

我所做的是检查收到的消息是否适合我。如果是,我会调用intent服务和setResult(Activity.RESULT_OK,null,null);会阻止消息传递给其他接收者。如果消息不适合我,我会将其传递给下一个接收者。同样在清单文件中,我将此接收器的优先级设置得更高,以确保它首先接收消息。