查看android listview上特定应用程序的权限名称

v64noz0r  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(365)

你好,我是java和android世界的新手。我正在做一个我自己的项目。基本上,我需要在一个列表视图上显示特定应用程序的权限名称。
虽然我已经实现了,而且效果很好。但在我的列表视图中,我得到的权限名称类似于“android.permission.manage\u accounts”
但是我想把这个字符串显示为“manageaccounts”
这是我写的代码块。

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

它将权限名称列为“android.permission.permission\u name”或类似的名称。但我想把它们表现得有点像人类可读的。例如,将“android.permission.permission\u name”显示为“permission name”。

r8xiu3jd

r8xiu3jd1#

final 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();
    }
dba5bblo

dba5bblo2#

转换字符串 "android.permission.MANAGE_ACCOUNTS""Manage Accounts" 是可能的。但应用相同的算法(删除)是不安全的 android.permission. ,然后更换 _ whit space和将字符串转换为小写)设置为所有权限。
如果您确定所有权限名称都遵循相同的规则,则可以执行以下操作:

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() + " ";
        }

(也许这不是最好的方法,但确实有效)
另外,由于权限是静态的,因此可以使用 HashMap 要存储每个权限的名称,请执行以下操作:

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

这样,您就不用担心不同的权限样式,也可以使用所需的权限名称。

相关问题