简体   繁体   English

在Android ListView上查看特定应用的权限名称

[英]View permission names of a specific app on android ListView

Hello I am pretty basic new to Java and Android world. 您好,我是Java和Android世界的新手。 Currenty working on a project of my own. 目前正在从事我自己的项目。 Basically I need to show permission names of a specific app on a ListView. 基本上,我需要在ListView上显示特定应用程序的权限名称。

Though I already implemented it and it working well. 尽管我已经实现了它并且效果很好。 but on my list view I am getting permission names as something like "android.permission.MANAGE_ACCOUNTS" 但是在我的列表视图中,我得到的权限名称类似“ android.permission.MANAGE_ACCOUNTS”

But I want to show that string as "Manage Accounts" 但我想将该字符串显示为“ Manage Accounts”

Here is the code block that I have written. 这是我编写的代码块。

final PackageManager pm = getPackageManager();

List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

    try {
        PackageInfo packageInfo = pm.getPackageInfo(appPackageName, PackageManager.GET_PERMISSIONS);

        //Get Permissions
        String[] requestedPermissions = packageInfo.requestedPermissions;

        if(requestedPermissions != null) {
            for (int i = 0; i < requestedPermissions.length; i++) {

                Log.d("test", requestedPermissions[i]);

                itemname.add(requestedPermissions[i]);

            }
        }
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
}

It lists permission names as "android.permission.PERMISSION_NAME" or something like that. 它列出的权限名称为“ android.permission.PERMISSION_NAME”或类似名称。 But I want to show them as a bit like human readable. 但我想将它们显示为有点可读。 for example showing "android.permission.PERMISSION_NAME" as "Permission Name". 例如将“ android.permission.PERMISSION_NAME”显示为“权限名称”。

Converting a string like "android.permission.MANAGE_ACCOUNTS" to "Manage Accounts" is possible. 可以将类似"android.permission.MANAGE_ACCOUNTS"的字符串转换为"Manage Accounts" But it cannot be safe to apply a same algorithm (removing android.permission. , then replacing _ whit space and the convert string to lowercase) to all permissions. 但是对所有权限应用相同的算法(删除android.permission. ,然后替换_ whit空间并将转换后的字符串转换为小写)是不安全的。

If you are sure that all permission names follow a same rule you can do something like this: 如果您确定所有权限名称都遵循相同的规则,则可以执行以下操作:

String permissionName = "android.permission.PERMISSION_NAME";
        permissionName = permissionName.replace("android.permission.", "");
        String[] words = permissionName.split("_");
        String newPermissionName = "";
        for(String word: words){
            newPermissionName+= word.substring(0,1) + word.substring(1).toLowerCase() + " ";
        }

(Maybe it is not the best way but it works) (也许这不是最好的方法,但是它可行)

Also because the permissions are static, you can use a HashMap to store a name for each permission: 同样因为权限是静态的,所以可以使用HashMap为每个权限存储一个名称:

map.put("android.permission.MANAGE_ACCOUNTS", "Manage Accounts");

By this way you are not worry about different permission styles and also you can use your desired permission name. 这样,您不必担心不同的权限样式,也可以使用所需的权限名称。

final PackageManager pm = getPackageManager(); 最后的PackageManager pm = getPackageManager();

    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

    try {
        PackageInfo packageInfo = pm.getPackageInfo("ashish.app.com.getpremissions", PackageManager.GET_PERMISSIONS);

        //Get Permissions
        String[] requestedPermissions = packageInfo.requestedPermissions;

        if (requestedPermissions != null) {
            for (int i = 0; i < requestedPermissions.length; i++) {

                Log.d("test", requestedPermissions[i]);

                String[] last = requestedPermissions[i].toString().split("\\.");

                String lastOne = last[last.length - 1];

                if (!lastOne.contains("_")) {
                    Log.e("app", "permissions is----" + lastOne.toLowerCase());
                } else {
                    String[] permissions = lastOne.split("_");
                    StringBuffer sb = new StringBuffer();
                    for (int index = 0; index < permissions.length; index++) {
                        sb.append(permissions[index].toLowerCase());
                        sb.append(" ");
                    }
                    Log.e("app", "permissions is----" + sb.toString());
                }

                // itemname.add();

            }
        }
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM