我的应用程序中有 2 个接收器和 2 个用于 GCM 的 GCMIntentService 类;一个在我的应用程序中,另一个包含在我添加到我的应用程序的库中。当通过 GCM 收到消息时;我想知道如何识别接收到的消息的意图服务,并让正确的接收者处理它。有人建议在这里 将结果传播到下一个接收器,如果它不适合我的,但我无法做到。如果有人可以帮助我,我将不胜感激。
问问题
617 次
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 回答