安卓Intent设置标志位问题

3

我找到了一些关于启动包含int意图的新活动意图的代码:

intent.setFlags(268435456);

而不是适当的Intent.FLAG_ACTIVITY_NEW_TASK或其他。

有什么最好的方法可以确定这个int实际上等于什么,这样我们就不会通过设置错误的int来破坏应用程序了吗?我想稍微整理一下这段代码。


标志值已经存在。为什么不查看文档并根据需要使用该标志呢?检查AS中的Open Intent类是最好的方法。我现在可以看到,此值与FLAG_ACTIVITY_NEW_TASKFLAG_RECEIVER_FOREGROUND相映射。 - ADM
可以同时添加两个吗? - Tom Hammond
1个回答

17

标志基于设置个别位,因此您想要做的第一件事是将该值转换为二进制。您可以使用任何允许您在十进制和二进制之间进行转换的标准计算器应用程序来完成此操作。在这种情况下:

‭0001 0000 0000 0000 0000 0000 0000 0000‬
   ^

只有一位二进制位被设置为true(从右边开始数第28位)。所有的Intent标志都声明为十六进制值(例如,FLAG_ACTIVITY_NEW_TASK = 0x10000000),因此您可能只需要将其转换为十六进制并找出哪个匹配即可。

public static final int FLAG_ACTIVITY_NEW_TASK = 0x10000000;

结果证明,在这种情况下,那正是我们要找的。假设你有一个更加复杂的——多个标志的组合:

intent.setFlags(335544320);

再次转换为二进制:

‭0001 0100 0000 0000 0000 0000 0000 0000‬
   ^  ^

所以我们有两个标志位。将它们分成两个单独的值,每个值只设置一个标志位:

0001 0000 0000 0000 0000 0000 0000 0000
0000 0100 0000 0000 0000 0000 0000 0000

转换为十六进制:

0x10000000
0x04000000

在查看 Intent 的源代码时,它映射到:

Intent.FLAG_ACTIVITY_NEW_TASK
Intent.FLAG_ACTIVITY_CLEAR_TOP

那么你的等效替代方案将是:

intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP);

1
这太棒了。非常感谢您提供的有用信息! - Tom Hammond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接