簡體   English   中英

在Android ListView上查看特定應用的權限名稱

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

您好,我是Java和Android世界的新手。 目前正在從事我自己的項目。 基本上,我需要在ListView上顯示特定應用程序的權限名稱。

盡管我已經實現了它並且效果很好。 但是在我的列表視圖中,我得到的權限名稱類似“ android.permission.MANAGE_ACCOUNTS”

但我想將該字符串顯示為“ Manage Accounts”

這是我編寫的代碼塊。

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_NAME”或類似名稱。 但我想將它們顯示為有點可讀。 例如將“ android.permission.PERMISSION_NAME”顯示為“權限名稱”。

可以將類似"android.permission.MANAGE_ACCOUNTS"的字符串轉換為"Manage Accounts" 但是對所有權限應用相同的算法(刪除android.permission. ,然后替換_ whit空間並將轉換后的字符串轉換為小寫)是不安全的。

如果您確定所有權限名稱都遵循相同的規則,則可以執行以下操作:

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

這樣,您不必擔心不同的權限樣式,也可以使用所需的權限名稱。

最后的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