我正在尝试编写一些代码,为了测试目的,它允许我的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(aka info.permissions)数组为null。因此,在运行时期间未检测到任何权限。任何线索可能是什么问题,如果这与我允许我的仪器添加通话记录的任务相关?
非常感谢。
答案 0 :(得分: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();
}
我已将此权限保留在我的清单文件中:
<permission android:name="anypermission"></permission>
它在logcat中给我长度= 1。
我不知道从清单中获取所有<uses-permission>
。但是,如果您只想检查清单中是否有特定权限,可以尝试:
if (instrumentationPM.checkPermission(permission.ACCESS_WIFI_STATE, getPackageName()) == PackageManager.PERMISSION_GRANTED) {
System.out.println("wifi state permission");
} else {
// do something
}