安卓(Android) 怎么判断是否已授予权限

2019年10月19日11:16:42安卓(Android) 怎么判断是否已授予权限已关闭评论 299 2974字阅读9分54秒

1.简介

安卓(Android) 怎么判断是否已授予权限?——请看下文。

2.示例代码

/**
 * 版权所有 编程十万个怎么办(www.tah1986.com)
 */


import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.util.Log;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class Main{
    private static final String TAG = PermissionUtil.class.getSimpleName();
    private static Map<String, Integer> mProtectionLevelMap;
    @SuppressWarnings("unused")
    public static boolean hasGrantedPermissions(Context context,
            int protectionLevel) {
        String[] permissions = getPermissions(context, protectionLevel);
        Map<String, Integer> flagMap = getFlagMap(context);

        if (permissions == null || permissions.length == 0) {
            return false;
        }

        for (String permission : permissions) {
            if (!flagMap.get(permission).equals(
                    PackageInfo.REQUESTED_PERMISSION_GRANTED)) {
                return false;
            }
        }

        return true;
    }
    @SuppressWarnings("unused")
    public static String[] getPermissions(Context context) {
        return getPermissions(context, -1);
    }
    public static String[] getPermissions(Context context,
            int protectionLevel) {
        if (mProtectionLevelMap == null) {
            mProtectionLevelMap = getProtectionLevelMap(context);
        }

        if (mProtectionLevelMap != null) {
            if (protectionLevel == -1) {
                return mProtectionLevelMap.keySet().toArray(new String[0]);
            }

            List<String> permissions = new ArrayList<String>();

            for (Map.Entry<String, Integer> entry : mProtectionLevelMap
                    .entrySet()) {
                if (entry.getValue().equals(protectionLevel)) {
                    permissions.add(entry.getKey());
                }
            }

            return permissions.toArray(new String[0]);
        }

        return null;
    }
    public static Map<String, Integer> getFlagMap(Context context) {
        Map<String, Integer> flagMap = new HashMap<String, Integer>();

        PackageManager packageManager = context.getPackageManager();

        try {
            PackageInfo packageInfo = packageManager.getPackageInfo(
                    context.getPackageName(),
                    PackageManager.GET_PERMISSIONS);

            Iterator<String> permissionIterator = Arrays.asList(
                    packageInfo.requestedPermissions).iterator();
            List<Integer> list = new ArrayList<Integer>(
                    packageInfo.requestedPermissionsFlags.length);
            for (int value : packageInfo.requestedPermissionsFlags) {
                list.add(value);
            }
            Iterator<Integer> flagIterator = list.iterator();

            while (permissionIterator.hasNext() || flagIterator.hasNext()) {
                flagMap.put(permissionIterator.next(), flagIterator.next());
            }
        } catch (PackageManager.NameNotFoundException exception) {
            Log.e(TAG, "Error getting package info", exception);
        }

        return flagMap;
    }
    public static Map<String, Integer> getProtectionLevelMap(Context context) {
        Map<String, Integer> protectionLevelMap = new HashMap<String, Integer>();

        PackageManager packageManager = context.getPackageManager();

        try {
            PackageInfo packageInfo = packageManager.getPackageInfo(
                    context.getPackageName(),
                    PackageManager.GET_PERMISSIONS);

            for (String permission : packageInfo.requestedPermissions) {
                int protectionLevel = packageManager.getPermissionInfo(
                        permission, PackageManager.GET_META_DATA).protectionLevel;

                protectionLevelMap.put(permission, protectionLevel);
            }
        } catch (PackageManager.NameNotFoundException exception) {
            Log.e(TAG, "Error getting package info", exception);
        }

        return protectionLevelMap;
    }
}

 
继续阅读
编程十万个怎么办