2014-07-11 2 views
1

이상한 질문입니다.Android 매니페스트 권한이 런타임 권한과 일치하지 않습니다.

테스트 목적으로 Instrumentation의 테스트 인스턴스에서 프로그래밍 방식으로 호출 로그를 추가 할 수 있도록 몇 가지 코드를 작성하려고합니다. 간단하지만 이렇게하려면 android.permission.WRITE_CALL_LOG 권한이 필요합니다.

나는이를 추가 한 내 매니페스트

<uses-permission android:name="android.permission.WRITE_CALL_LOG"/> 

하지만

PackageManager instrumentationPM = instrumentationContext.getPackageManager(); 
PackageInfo info = instrumentationPM.getPackageInfo(PACKAGE_NAME, 
    PackageManager.GET_PERMISSIONS); 
PermissionInfo[] permission_info = info.permissions; 

permission_info (일명 info.permissions) 배열이 null ... 런타임시이 코드를 사용하는 경우. 따라서 런타임 중에 사용 권한이 검색되지 않습니다. 어떤 문제가 여기에있을 수 있으며, 내 계측기가 통화 기록을 추가하도록 허용하는 것과 관련이 있다면?

감사합니다.

답변

0

이 코드는 <uses-permission> 지정한 매니페스트 파일을 반환하지 않습니다. 대신 시스템 레벨 permission<permission>을 리턴합니다.

나는이 코드를 시도 :

PackageManager instrumentationPM = getApplicationContext().getPackageManager(); 
    PackageInfo info; 
    try { 
     info = instrumentationPM.getPackageInfo("com.example.testingproj", 
      PackageManager.GET_PERMISSIONS); 
     PermissionInfo[] permission_info = info.permissions; 
     if(permission_info!=null) 
      System.out.println(permission_info.length); 
    } catch (NameNotFoundException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

을 그리고 난 내 매니페스트 파일에이 권한을 유지 한 : 그것은 로그 캣 나에게 길이 = 1을 제공

<permission android:name="anypermission"></permission> 

.

나는 모든 <uses-permission>이 매니페스트에서 나오지 않는 것을 알고 있습니다. 그러나 매니페스트에 특정 권한이 있는지 확인하려는 경우 다음을 시도해보세요.

if (instrumentationPM.checkPermission(permission.ACCESS_WIFI_STATE, getPackageName()) == PackageManager.PERMISSION_GRANTED) { 
     System.out.println("wifi state permission"); 
    } else { 
     // do something 
    } 
+0

감사합니다. 훌륭한 정보입니다. – mmnormyle

관련 문제