我的应用程序中有2个接收器和2个GCMIntentService类用于GCM;一个在我的应用程序中,另一个包含在我已添加到我的应用程序的库中。当通过GCM收到消息时;我想知道如何识别收到的消息所针对的意图服务,并让正确的接收者处理它。有人建议here将结果传播到下一个接收器,如果它不是我的意图,但我无法设法做到这一点。如果有人可以帮助我,我真的很感激。
答案 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);会阻止消息传递给其他接收者。如果消息不适合我,我会将其传递给下一个接收者。同样在清单文件中,我将此接收器的优先级设置得更高,以确保它首先接收消息。