我的代码中出现了这个异常:
...IllegalArgumentException...Cant use FLAG_RECEIVER_BOOT_UPGRADE here...
查看android源代码似乎无法设置标记到将被触发的Intent:
PendingIntent.getBroadcast(...);
这里是Android源代码:
...
if (type == INTENT_SENDER_BROADCAST) {
if ((intent.getFlags()&Intent.FLAG_RECEIVER_BOOT_UPGRADE) != 0) {
throw new IllegalArgumentException("Can't use FLAG_RECEIVER_BOOT_UPGRADE here");
}
}
...
这是我的代码:
Intent myIntent = new Intent(context, MyReceiver.class);
//myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if i remove the comment it doesn't work
PendingIntent pending = PendingIntent.
getBroadcast(context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
原因我不清楚,有人可以为我澄清一下吗?
答案 0 :(得分:4)
当您使用PendingIntent
获得getBroadcast()
时,此Intent将广播到BroadcastReceivers。它不会用于启动活动。因此,您无法设置任何与活动相关的标志。无论如何,他们在这种背景下没有任何意义。
为什么要在要播放的意图中设置FLAG_ACTIVITY_NEW_TASK
?这毫无意义。
Android将Intent用于3个完全不同的目的:
Activity
Service
BroadcastReceiver
PendingIntent
类提供了3种不同的方法来为这些不同的目的获取PendingIntent:
您需要确保为正确的目的使用正确的方法。
是的,你可以在PendingIntent中设置与Activity相关的Intent标志,只要你调用getActivity()来获取PendingIntent。