gwv*_*eri 1 android android-intent
我在我的代码中遇到此异常:
...IllegalArgumentException...Cant use FLAG_RECEIVER_BOOT_UPGRADE here...
Run Code Online (Sandbox Code Playgroud)
查看 android 源代码似乎您无法为将要触发的 Intent 设置标志:
PendingIntent.getBroadcast(...);
Run Code Online (Sandbox Code Playgroud)
这里是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");
}
}
...
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
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);
Run Code Online (Sandbox Code Playgroud)
原因我不太清楚,请问有人可以帮我解释一下吗?
当你得到一个PendingIntentusing时getBroadcast(),这个 Intent 将被广播到 BroadcastReceivers。它不会用于启动活动。因此您无法设置任何与活动相关的标志。无论如何,它们在这种情况下没有任何意义。
为什么要设置FLAG_ACTIVITY_NEW_TASK要广播的 Intent?这是没有意义的。
Android 将 Intent 用于 3 个完全不同的目的:
ActivityServiceBroadcastReceiver该类PendingIntent提供了 3 种不同的方法来获取 PendingIntent 以满足这些不同的目的:
您需要确保为正确的目的使用正确的方法。
是的,您可以在 PendingIntent 中设置与 Activity 相关的 Intent 标志,只要您调用 getActivity() 来获取 PendingIntent 即可。
| 归档时间: |
|
| 查看次数: |
5752 次 |
| 最近记录: |