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);
  }
}