获取android安装权限,Android获取安装应用所需权限(二)使用PermissionInfo

上次的获取权限信息的Demo略显繁琐,优化了一下,使用系统接口PermissionInfo获取常见的权限描述,如果是对系统不可知的权限,我们在自定义。另外自定义的权限信息函数也从if else语句换成了swithc case语句,虽然还是一大堆,但是看起来结构更清晰一些:

package com.zms.getpermission;

import android.app.ListActivity;

import android.content.Intent;

import android.content.pm.ApplicationInfo;

import android.content.pm.PackageManager;

import android.content.pm.PermissionGroupInfo;

import android.content.pm.PermissionInfo;

import android.content.pm.ResolveInfo;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

/**

* Created by AlexZhou on 2015/1/27.

* 8:48

*/

public class Main extends ListActivity {

HashMap hashMap = new HashMap();

List dataAppList = new ArrayList();

List systemAppList = new ArrayList();

protected void onCreate(android.os.Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

PackageManager pm = getPackageManager();

Intent query = new Intent(Intent.ACTION_MAIN);

query.addCategory("android.intent.category.LAUNCHER");

List resolves = pm.queryIntentActivities(query, PackageManager.GET_ACTIVITIES);

dataAppList.add(""); // take up the position, refresh it after getting dataApp size

for (int i = 0; i < resolves.size(); i++) {

ResolveInfo resolveInfo = resolves.get(i);

String packageName = resolveInfo.loadLabel(pm).toString();

String[] permission;

try {

// get permission list

permission = pm.getPackageInfo(resolveInfo.activityInfo.packageName,

PackageManager.GET_PERMISSIONS).requestedPermissions;

// app is system app ?

if (isSystemApp(resolveInfo)) {

systemAppList.add(packageName);

} else {

dataAppList.add(packageName);

}

hashMap.put(packageName, permission);

} catch (PackageManager.NameNotFoundException e) {

e.printStackTrace();

}

}

dataAppList.set(0, "===== Data Apps(" + dataAppList.size() + ") =====");

dataAppList.add("");

dataAppList.add("===== System Apps(" + systemAppList.size() + ") =====");

dataAppList.addAll(systemAppList);

getListView().setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1,

dataAppList));

getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView> arg0, View arg1, int position, long arg3) {

String[] permission = hashMap.get(dataAppList.get(position));

StringBuilder stringBuilder = new StringBuilder();

try {

for (int i = 0; i < permission.length; i++) {

stringBuilder.append(getPermissionDetailSys(permission[i]) + "\n");

}

Intent intent = new Intent(Main.this, ShowPermission.class);

intent.putExtra("strPermission", dataAppList.get(position) + " has " +

permission.length + " Permission(s):\n\n" + stringBuilder);

startActivity(intent);

} catch (Exception e) {

// ToDo:Handle Exception

}

}

});

}

private boolean isSystemApp(ResolveInfo resolveInfo) {

if ((resolveInfo.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {

return false;

} else {

return true;

}

}

/**

* use system func to get normal permission info

*

* @param permissionName

* @return string

*/

public String getPermissionDetailSys(String permissionName) {

String strPermissionInfo = "";

try {

PackageManager pm = Main.this.getPackageManager();

// get permission info by name

PermissionInfo permissionInfo = pm.getPermissionInfo(permissionName, 0);

// get permission group

PermissionGroupInfo permissionGroupInfo = pm.getPermissionGroupInfo(

permissionInfo.group, 0);

strPermissionInfo = "[" + permissionGroupInfo.loadLabel(pm).toString() + "] " +

permissionInfo.loadLabel(pm).toString() + ":\n" +

permissionInfo.loadDescription(pm).toString() + "\n";

} catch (PackageManager.NameNotFoundException e) {

// use our func if permission info not matched

return getPermissionDetail(permissionName) + "\n";

}

return strPermissionInfo;

}

/**

* if getPermissionDetailSys() is execute catch part, this func will run

*

* @param strPermission

* @return description of permission, or permission name if not matched.

*/

public String getPermissionDetail(String strPermission) {

switch (strPermission) {

/***** A *****/

case "android.permission.ACCESS_ALL_DOWNLOADS":

return getResources().getString(R.string.ACCESS_ALL_DOWNLOADS);

case "android.permission.ACCESS_CACHE_FILESY

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值