ApplicationInfo에 대한 플래그를 확인하기 위해 this post을 읽었습니다. 그러나 그때 나는 깃발에 포함 된 모든 값을 얻을 수있는 방법이 있는지보기 위해 this post을 읽었지 만 약간 혼란 스럽습니다. 모든 가치를 얻고 설명 할 수있는 방법이 있다면 말해 줄 수 있습니까?flag bits java의 모든 값을 확인하십시오. Android
미리 감사드립니다.
ApplicationInfo에 대한 플래그를 확인하기 위해 this post을 읽었습니다. 그러나 그때 나는 깃발에 포함 된 모든 값을 얻을 수있는 방법이 있는지보기 위해 this post을 읽었지 만 약간 혼란 스럽습니다. 모든 가치를 얻고 설명 할 수있는 방법이 있다면 말해 줄 수 있습니까?flag bits java의 모든 값을 확인하십시오. Android
미리 감사드립니다.
정수 플래그는이 방법으로 작동합니다. 정수가 48이라고하면 이진수는 0011 0000
이됩니다. 즉, 두 개의 플래그 (0010 0000
이고 다른 하나는 0001 0000
)를 포함하고 있음을 의미합니다. ApplicationInfo 플래그를 확인하면 모든 값은 2의 제곱 (1,2,4,8 ..)임을 알 수 있습니다. 2의 거듭 제곱의 이진 표현은 모두 0이고 순서는 1이므로 (당신이 의심이있는 경우가 this를 참조하시기 바랍니다에 대해, 그것이 비트의의 &
연산자를 알 AND) 정수 48에 포함 된 내용을 플래그를 확인하기 위해, 당신은이 방법을 수행 할 수 있습니다
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"));
}
난 정말 이해하지 못했다 당신이 묻는 접근 방식이지만 모든 플래그를 검사하는 또 다른 방법은 1에서 31까지의 2의 모든 능력을 반복하는 것입니다 (자바와 같은 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"));
}
감사합니다, 내 질문을 이해 점이었다 lelloman 사실이었다이 같은 aproach https://www.b4x.com/android/forum/threads/what-does-the-applicationinfo -flags-mean.12633/ –
윙윙 거리며 다른 샘플을 추가했는데, 그게 당신이 찾고있는 것인지 확실하지 않습니다. – lelloman