2013-06-25 2 views
0

내 ApkInfo 활동에 권한 설명과 함께 사용 권한이 표시되어야합니다. 그러나 런타임 중에 권한 설명을 알 수없는 형식으로 표시합니다. 다음 코드에서 AppData 클래스는 선택된 앱이 설치된 앱 목록에서 채워진 packageInfo를 초기화하는 데 사용됩니다.권한 설명 검색 중 오류가 발생했습니다.

06-25 11:35:00.741: D/Permissions description(776): Null 
06-25 11:35:00.741: D/PERMISSION DESCRIPTION(776): PermissionInfo{40da5f10 android.permission.CAMERA} 
06-25 11:35:00.754: W/System.err(776): java.lang.NullPointerException 
06-25 11:35:00.781: W/System.err(776): at com.ibc.android.demo.appslist.activity.ApkInfo.getPermissions(ApkInfo.java:54) 
06-25 11:35:00.781: W/System.err(776): at com.ibc.android.demo.appslist.activity.ApkInfo.onCreate(ApkInfo.java:34) 
06-25 11:35:00.781: W/System.err(776): at android.app.Activity.performCreate(Activity.java:5104) 
06-25 11:35:00.793: W/System.err(776): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
06-25 11:35:00.793: W/System.err(776): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
06-25 11:35:00.812: W/System.err(776): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
06-25 11:35:00.812: W/System.err(776): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
06-25 11:35:00.812: W/System.err(776): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
06-25 11:35:00.821: W/System.err(776): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-25 11:35:00.821: W/System.err(776): at android.os.Looper.loop(Looper.java:137) 
06-25 11:35:00.831: W/System.err(776): at android.app.ActivityThread.main(ActivityThread.java:5041) 
06-25 11:35:00.841: W/System.err(776): at java.lang.reflect.Method.invokeNative(Native Method) 
06-25 11:35:00.841: W/System.err(776): at java.lang.reflect.Method.invoke(Method.java:511) 
06-25 11:35:00.851: W/System.err(776): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
06-25 11:35:00.851: W/System.err(776): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
06-25 11:35:00.851: W/System.err(776): at dalvik.system.NativeStart.main(Native Method) 
06-25 11:35:00.861: D/Permissions description(776): Null 
06-25 11:35:00.861: D/PERMISSION DESCRIPTION(776): PermissionInfo{40da7378 android.permission.RECORD_AUDIO} 
06-25 11:35:00.891: D/Permissions description(776): Null 
06-25 11:35:00.891: D/PERMISSION DESCRIPTION(776): PermissionInfo{40daa998 android.permission.ACCESS_FINE_LOCATION} 
06-25 11:35:00.931: D/Permissions description(776): Null 
06-25 11:35:00.931: D/PERMISSION DESCRIPTION(776): PermissionInfo{40dab3b8 android.permission.WAKE_LOCK} 
06-25 11:35:00.964: D/Permissions description(776): Null 
06-25 11:35:00.964: D/PERMISSION DESCRIPTION(776): PermissionInfo{40dabf28 android.permission.SET_WALLPAPER} 
06-25 11:35:00.991: D/Permissions description(776): Null 
06-25 11:35:00.991: D/PERMISSION DESCRIPTION(776): PermissionInfo{40dacaa8 android.permission.WRITE_EXTERNAL_STORAGE} 
06-25 11:35:01.021: D/Permissions description(776): Null 
06-25 11:35:01.021: D/PERMISSION DESCRIPTION(776): PermissionInfo{40dad588 android.permission.READ_SMS} 
06-25 11:35:01.041: D/Permissions description(776): Null 
06-25 11:35:01.041: D/PERMISSION DESCRIPTION(776): PermissionInfo{40dae020 android.permission.READ_EXTERNAL_STORAGE} 

왜 내 ApkInfo 활동이 방식으로 권한에 대한 설명을 표시한다 : 여기

public class ApkInfo extends Activity { 

PackageInfo packageInfo; 
PermissionInfo pi; 
PackageManager pm;  

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.apkinfo); 
PermissionInfo pi = new PermissionInfo(); 
AppData appData = (AppData) getApplicationContext(); 
packageInfo = appData.getPackageInfo(); 
if (packageInfo.requestedPermissions != null){ 
String[] permissions = getPermissions(packageInfo.requestedPermissions, pi); 
} 
private String[] getPermissions(String[] requestedPermissions, PermissionInfo pinfo) { 
pm = getPackageManager(); 
String permission = ""; 
for (int i = 0; i < requestedPermissions.length; i++) { 
try { 
pinfo = pm.getPermissionInfo(requestedPermissions[i], PackageManager.GET_META_DATA); 

try { 

pinfo.loadDescription(pm).toString(); 

}catch(NullPointerException ex){ 

       ex.printStackTrace(); 

}finally{ 

Log.d("Permissions description", "Null"); 
} 
} catch (NameNotFoundException e) { 
    e.printStackTrace(); 
} 
permission = permission + requestedPermissions[i] + " " + pinfo + "\n";  
Log.d("PERMISSIONS" , pm.toString()); 
} 
String lines[] = permission.split("\\n"); 
return lines; 
} 
} 

내 로그 캣 출력입니까? 일부 앱의 경우 NullPointerException이 표시됩니다.

답변

0

PermissionInfo의 loadDescription 메서드는 charSequence를 반환합니다. 내 코드에서 정확한 정보를 제공하지 못하는 toString 메서드를 사용하여 pinfo.loadDescription (pm) 문에서 반환 된 설명 정보를 문자열로 변환하려고합니다. stringBuilder를 사용하면 문제가 해결됩니다.

CharSequence c = pinfo.loadDescription(pm); 
StringsBuilder sb = new StringBuilder(c.length()); 
sb.append(c); 
sb.toString(); 

이것은 부분 답변입니다. 널 포인터 예외에 응답하지 않았습니다. 아직도 그 이유를 찾으려고 노력 중입니다.

관련 문제