jos*_*eRo 4 android broadcastreceiver push-notification google-cloud-messaging
我正在使用Android开发人员的GCM示例,无法理解setResultCode(Activity.Result_OK)的用途.哪个组件收到此消息?谁在呼唤并接收它?
这是一个例子
public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ComponentName comp = new ComponentName(context.getPackageName(),GcmIntentService.class.getName());
startWakefulService(context, (intent.setComponent(comp)));
setResultCode(Activity.RESULT_OK); // ?????
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
您的应用收到GCM消息的广播是有序广播.
有序广播(与Context.sendOrderedBroadcast一起发送)一次传送到一个接收器.当每个接收器依次执行时,它可以将结果传播到下一个接收器,或者它可以完全中止广播,以便它不会传递给其他接收器.可以使用匹配的intent-filter的android:priority属性来控制运行的订单接收器; 具有相同优先级的接收器将以任意顺序运行.
这意味着如果您的应用程序有多个配置为处理GCM消息的广播接收器,它们将一个接一个地调用(按照依赖于其优先级的顺序).例如,如果您的应用使用某个使用GCM的第三方库,您可能有多个广播接收器处理GCM消息,此外您的应用程序直接使用GCM.在这种情况下,您希望您的应用只处理自己的消息,而不是处理发送到第三方库的消息(反之亦然).
如果其中一个处理GCM消息而您不希望其他人处理它,则可以中止广播.你做到了setResultCode(Activity.RESULT_CANCEL).另一方面,setResultCode(Activity.RESULT_OK)将第一接收器的结果传播到下一个接收器.
在这种情况下,您的代码将如下所示:
public class GCMBroadcastReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getExtras ().get("from").equals (SENDER_ID_OF_YOUR_APP) {
ComponentName comp = new ComponentName(
GcmIntentService.class.getPackage().getName(),
GcmIntentService.class.getName());
startWakefulService(context, (intent.setComponent(comp)));
// abort the broadcast
setResultCode(Activity.RESULT_CANCEL);
} else
// don't abort the broadcast
setResultCode(Activity.RESULT_OK);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您只有一个处理GCM消息的广播接收器,则呼叫setResultCode很重要.
| 归档时间: |
|
| 查看次数: |
2330 次 |
| 最近记录: |