[英]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.