我已阅读 this post为了检查 ApplicationInfo 的标志。但后来我读到this post为了看看是否有办法获取标志中包含的所有值,但我有点困惑。谁能告诉我是否有办法获得所有值并解释它?
提前致谢。
最佳答案
int 标志是这样工作的,你有一个整数,比如 48,在二进制中它是 0011 0000
。这意味着它包含 2 个标志,一个是 0010 0000
,另一个是 0001 0000
。如果您检查 ApplicationInfo 标志,您会注意到所有值都是 2 的幂 (1,2,4,8..),这是因为 2 的幂的二进制表示形式全是零,只有一个 1。所以,按顺序要检查整数 48 包含哪些标志,您可以这样做(注意 &
运算符,它是按位 AND,如果您对此有疑问,请阅读 this ):
int value = 48;
int[] possibleFlags = {ApplicationInfo.FLAG_FACTORY_TEST, ApplicationInfo.FLAG_ALLOW_TASK_REPARENTING, ApplicationInfo.FLAG_ALLOW_BACKUP};
String[] flagNames = {"FLAG_FACTORY_TEST", "FLAG_ALLOW_TASK_REPARENTING", "FLAG_ALLOW_BACKUP"};
for (int i = 0; i < possibleFlags.length; i++) {
int aFlag = possibleFlags[i];
String name = flagNames[i];
boolean hasFlag = (value & aFlag) > 0;
Log.d("Flags", String.format("flag %s %s", name, hasFlag ? "PRESENT" : "NOT PRESENT"));
}
我不太明白你所问的方法,但检查所有标志的另一种方法是迭代 2 从 1 到 31 的所有幂(对于像 java 这样的 4 字节整数),但你仍然需要链接数字到实际常数,有用吗?例如
for (int i = 0; i < 32; i++) {
int aFlag = 1 << i;
boolean hasFlag = (value & aFlag) > 0;
Log.d("Flags", String.format("flag %s %s", aFlag, hasFlag ? "PRESENT" : "NOT PRESENT"));
}
关于java - java Android 检查标志位的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42483582/