2017-02-27 1 views

답변

1

정수 플래그는이 방법으로 작동합니다. 정수가 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")); 
} 
+0

감사합니다, 내 질문을 이해 점이었다 lelloman 사실이었다이 같은 aproach https://www.b4x.com/android/forum/threads/what-does-the-applicationinfo -flags-mean.12633/ –

+0

윙윙 거리며 다른 샘플을 추가했는데, 그게 당신이 찾고있는 것인지 확실하지 않습니다. – lelloman