Android 如何获得每个权限的保护级别?
我正在尝试列出所选应用程序中每个权限的保护级别,代码如下所示。但我不知道怎么做Android 如何获得每个权限的保护级别?,android,permissions,Android,Permissions,我正在尝试列出所选应用程序中每个权限的保护级别,代码如下所示。但我不知道怎么做 ArrayList<String> list_permission = new ArrayList<String>(); String[] reqp = info.requestedPermissions; if (reqp != null) { for (i = 0; i < reqp.length; i++) {
ArrayList<String> list_permission = new ArrayList<String>();
String[] reqp = info.requestedPermissions;
if (reqp != null) {
for (i = 0; i < reqp.length; i++) {
k = i + 1;
String a = reqp[i];
if (a.contains("android.permission.")) {
String aa[] = a.split("android.permission.");
list_permission.add(aa[1]);
} else {
list_permission.add(a);
}
}
}
ArrayList list_permission=new ArrayList();
字符串[]reqp=info.requestedPermissions;
如果(请求!=null){
对于(i=0;i
谁能帮我做这个。。。只想在权限前面添加保护级别。您可以使用class方法获取任何特定权限的对象。对象具有可用于检查任何权限的保护级别的属性。。。您可以对照类中定义的常量进行检查,如保护\u标志\u系统
类似以下代码:
for (PermissionInfo permission : packageInfo.permissions) {
// Dump permission info
String protectionLevel;
switch(permission.protectionLevel) {
case PermissionInfo.PROTECTION_NORMAL : protectionLevel = "normal"; break;
case PermissionInfo.PROTECTION_DANGEROUS : protectionLevel = "dangerous"; break;
case PermissionInfo.PROTECTION_SIGNATURE : protectionLevel = "signature"; break;
case PermissionInfo.PROTECTION_SIGNATURE_OR_SYSTEM : protectionLevel = "signatureOrSystem"; break;
default : protectionLevel = "<unknown>"; break;
}
Log.i("PermissionCheck", permission.name + " " + protectionLevel);
}
以下行仅适用于API 16级或更高级别:
case PermissionInfo.PROTECTION_FLAG_SYSTEM : protctionLevel = "system"; break;
//获取核心android软件包的权限
PackageInfo packageInfo = getPackageManager().getPackageInfo("android", PackageManager.GET_PERMISSIONS);
if (packageInfo.permissions != null) {
// For each defined permission
for (PermissionInfo permission : packageInfo.permissions) {
// Dump permission info
String protectionLevel;
switch(permission.protectionLevel) {
case PermissionInfo.PROTECTION_NORMAL : protectionLevel = "normal"; break;
case PermissionInfo.PROTECTION_DANGEROUS : protectionLevel = "dangerous"; break;
case PermissionInfo.PROTECTION_SIGNATURE : protectionLevel = "signature"; break;
case PermissionInfo.PROTECTION_SIGNATURE_OR_SYSTEM : protectionLevel = "signatureOrSystem"; break;
default : protectionLevel = "<unknown>"; break;
}
Log.i("PermissionCheck", permission.name + " " + protectionLevel);
}
}
PackageInfo-PackageInfo=getPackageManager().getPackageInfo(“安卓”,PackageManager.GET_权限);
if(packageInfo.permissions!=null){
//对于每个已定义的权限
对于(PermissionInfo权限:packageInfo.permissions){
//转储权限信息
字符串保护级别;
开关(权限.保护级别){
case PermissionInfo.PROTECTION\u NORMAL:protectionLevel=“NORMAL”中断;
案例许可信息保护\危险:protectionLevel=“危险”中断;
案例许可信息保护\签名:protectionLevel=“签名”中断;
案例许可info.PROTECTION\u SIGNATURE\u或\u系统:protectionLevel=“signatureOrSystem”中断;
默认值:protectionLevel=“”;中断;
}
Log.i(“PermissionCheck”,permission.name+“”+protectionLevel);
}
}
是否要检查已安装软件包的权限级别?如果是,则检查此API,即使这给出了整个权限保护级别。。。但是不知道如何为应用程序im DOING编码,所以它给出的初始值为0,1,2,3,所以0是正常的,1是危险的,2是签名,3是系统?不要使用int值使用将返回值与PermissionInfo类中定义的常量进行比较,以检查与您共享的链接类似的保护级别…您共享的链接中的代码足够好。。。如果您在该代码中有任何特定问题,请告诉我……是的,我尝试过,但不知道如何将权限保护级别设置为reqp[i]的选定权限。这就是我面临的问题,而且,如果我想改变保护级别的颜色,如红色和蓝色,我该怎么做。。。。“危险”(红色)类对于所选权限需求[i],我如何获取它。
PackageInfo packageInfo = getPackageManager().getPackageInfo("android", PackageManager.GET_PERMISSIONS);
if (packageInfo.permissions != null) {
// For each defined permission
for (PermissionInfo permission : packageInfo.permissions) {
// Dump permission info
String protectionLevel;
switch(permission.protectionLevel) {
case PermissionInfo.PROTECTION_NORMAL : protectionLevel = "normal"; break;
case PermissionInfo.PROTECTION_DANGEROUS : protectionLevel = "dangerous"; break;
case PermissionInfo.PROTECTION_SIGNATURE : protectionLevel = "signature"; break;
case PermissionInfo.PROTECTION_SIGNATURE_OR_SYSTEM : protectionLevel = "signatureOrSystem"; break;
default : protectionLevel = "<unknown>"; break;
}
Log.i("PermissionCheck", permission.name + " " + protectionLevel);
}
}