android 权限管理工具

此权限管理工具只做了相机和地理位置权限,可根据需求添加必要权限
1.首先在android6.0以后不仅需要静态设置权限,也需要动态设置权限

<uses-permission android:name="android.permission.CAMERA" />
<!--用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
2.检测是否有此权限
ContextCompat.checkSelfPermission(context,permission)==PackageManager.PERMISSION_GRANTED3.对于检测到没有此权限,要动态设置此权限
ActivityCompat.requestPermissions(activity, permissions, requestCode);
4.权限操作之后回调操作onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
package com.dejun.commonsdk.util;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.util.SimpleArrayMap;

import com.orhanobut.logger.Logger;

import java.util.ArrayList;
import java.util.List;

/**
 * Author:DoctorWei
 * Time:2018/12/17 14:19
 * Description:动态权限申请工具类 一般的软件一般需要文件读写权限 访问通讯录权限 定位权限 相机拍照 录音等权限
 * email:[email protected]
 */

public class PermissionsUtil {
    public static int REQUEST_CAMERA = 1;
    public static int REQUEST_EXTERNAL_STOREGE = 2;
    public static int REQUEST_CONTACTS = 3;
    public static int REQUEST_LOCATION = 4;
    private static final SimpleArrayMap<String, Integer> MIN_SDK_PERMISSIONS;

    static {
        MIN_SDK_PERMISSIONS = new SimpleArrayMap<>(8);//超过8就进行扩容
        MIN_SDK_PERMISSIONS.put("com.android.voicemail.permission.ADD_VOICEMAIL", 14);
        MIN_SDK_PERMISSIONS.put("android.permission.BODY_SENSORS", 20);
        MIN_SDK_PERMISSIONS.put("android.permission.READ_CALL_LOG", 16);
        MIN_SDK_PERMISSIONS.put("android.permission.READ_EXTERNAL_STORAGE", 16);
        MIN_SDK_PERMISSIONS.put("android.permission.USE_SIP", 9);
        MIN_SDK_PERMISSIONS.put("android.permission.WRITE_CALL_LOG", 16);
        MIN_SDK_PERMISSIONS.put("android.permission.SYSTEM_ALERT_WINDOW", 23);
        MIN_SDK_PERMISSIONS.put("android.permission.WRITE_SETTINGS", 23);
    }

    private static boolean permissionExists(String permission) {
        Integer minVersion = MIN_SDK_PERMISSIONS.get(permission);
        return minVersion == null || Build.VERSION.SDK_INT >= minVersion;
    }

    /**
     * 手否有拍照权限
     *
     * @param activity
     * @return
     */
    public static boolean hasCameraPermission(Activity activity,int requestCode) {

        if (!permissionExists(Manifest.permission.CAMERA)) {//无需动态申请权限
            Logger.d("permission", "your system does not suppport" + Manifest.permission.CAMERA + " permission");
            return false;
        }
        boolean requestPermission = requestPermission(activity, Manifest.permission.CAMERA,requestCode );
        return requestPermission;
    }

    /**
     * 是否有地理位置权限
     */
    public static boolean hasLocationPermission(Activity activity,int requestCode) {
        boolean requestPermissions = requestPermissions(activity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},requestCode);//允许应用访问精确(如GPS)性的定位 获取粗糙位置权限
        return requestPermissions;
    }
    /**
     * 检测是否需要一个权限
     */
    public static boolean checkSinglePermisssion(Context context,String permission){
        if (ContextCompat.checkSelfPermission(context,permission)==PackageManager.PERMISSION_GRANTED) {
            return true;
        }else {
            return false;
        }
    }
    /**
     * 请求权限
     */
    public static boolean requestPermission(Activity activity, String permission, int requestCode) {
        if (checkSinglePermisssion(activity,permission)){
            return true;
        }else{
            ActivityCompat.requestPermissions( activity, new String[]{permission}, requestCode);
            return false;
        }

    }
    public static boolean requestPermissions(Activity activity, String[] permissions, int requestCode) {
        List<String> unGrantedPermissions = checkMorePermisssions(activity, permissions);
        if (unGrantedPermissions.size()==0){//无需请求
            return true;
        }else{
            requestMorePermissions(activity, unGrantedPermissions, requestCode);
            return false;
        }
    }

    private static void requestMorePermissions(Activity activity, List<String> unGrantedPermissions, int requestCode) {
        String[] permissions = (String[]) unGrantedPermissions.toArray(new String[unGrantedPermissions.size()]);
        requestMorePermissions(activity, permissions, requestCode);
    }
    /**
     * 请求多个权限
     */
    public static void requestMorePermissions(Activity activity, String[] permissions, int requestCode) {
        ActivityCompat.requestPermissions(activity, permissions, requestCode);
    }
    /**
     * 检测多个权限 查询出未授权的权限
     * @param context
     * @param permissions
     * @return
     */
    public static List<String> checkMorePermisssions(Context context,String[]  permissions){
        List<String> unGrantedPermissions=new ArrayList<>();
        for (int i = 0; i <permissions.length ; i++) {
            String permission = permissions[i];
            if (!checkSinglePermisssion(context,permission)){
                unGrantedPermissions.add(permission);
            }
        }
       return unGrantedPermissions;

    }
    /**
     * 判断权限是否申请成功
     */
    public static boolean permissionRequest(int[] grantResults) {
        if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED)
            return true;
        else
            return false;
    }
    /**
     * 用户申请多个权限返回
     */
    public static boolean permissionsRequest(Context context, String[] permissions) {
        List<String> permissionList = checkMorePermisssions(context, permissions);
        if (permissionList.size() == 0) {
            return true;
        } else {
            return false;
        }

    }
}

猜你喜欢

转载自blog.csdn.net/Anthonybuer/article/details/85052818