有点奇怪的问题。
我正在尝试编写一些代码,出于测试目的,它允许我的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。因此,在运行时未检测到权限。有什么线索可能是这里的问题,如果这与我允许我的仪器添加呼叫日志的任务完全相关?
谢谢你
最佳答案
此代码将不返回<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
}
关于android - Android list 权限与运行时权限不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24688281/