android 6.0 动态权限获取工具类

直接上代码

package com.example.deviceinfo.util;


public class Permission {
    /**
     * 请求码
     */
    public int requestCode;
    /**
     *  Manifest.permission.***
     */
    public String permission;
    /**
     * 是否有权限
     */
    public boolean hasPermission;

    public Permission(int requestCode, String permission, boolean hasPermission) {
        this.requestCode = requestCode;
        this.permission = permission;
        this.hasPermission = hasPermission;
    }
}
package com.example.deviceinfo.util;

import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Build;

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

/**
 * 描述: 动态权限管理类
 * 该类会自动判断系统版本,如果高于23,则会动态申请权限
 */

@SuppressLint("NewApi") public class Permissions {
    private static List<Permission> permissions = new ArrayList<Permission>();
    public static boolean need;//需要动态申请权限
    static {
        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M) {
            need = true;
            initPermissions();
        }
    }
    public static void addPermission(Permission permission){
        if(need) {
            permissions.add(permission);
        }
    }
    /**
     * 初始化权限
     */
    private static void initPermissions() {
        if(need) {
            // TODO: 2017/7/28  在此声明所需 动态添加 权限
            //单个权限
            /*addPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
            addPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);*/
            // 多组权限
            addPermissions(
                    Manifest.permission.READ_PHONE_STATE,
                    Manifest.permission.BLUETOOTH_ADMIN,
                    Manifest.permission.ACCESS_WIFI_STATE,
                    Manifest.permission.CHANGE_WIFI_STATE,
                    Manifest.permission.BLUETOOTH
            );

        }
    }
private static int index = 0;
    /**
     * 请求所有权限
     * @param activity
     */
    public static void requestPermissionAll(Activity activity){
        if(need) {
            if(index>=permissions.size())
                return;
            Permission permission = permissions.get(index);
            boolean succeed = RequestPermissionUtil.requestPermission(activity, permission.permission, permission.requestCode);
            permission.hasPermission = succeed;
            index++;
            if(succeed){
                requestPermissionAll(activity);
            }
        }
    }

    /**
     * 改变权限的状态
     * @param permission 权限名
     * @param success 是否请求成功
     */
    public static void changePermissionState(Activity activity, String permission, boolean success){
        if(need) {
            findPermission(permission).hasPermission = success;
        }
        requestPermissionAll(activity);
    }
    public static Permission findPermission(String permission){
        if(need) {
            for (Permission p : permissions) {
                if (p.permission.equals(permission)) {
                    return p;
                }
            }
        }
        return addPermission(permission);
    }
    public static Permission addPermission(String permission){
        if(need) {
            Permission p = new Permission(permissions.size(), permission, false);
            permissions.add(p);
            return p;
        }
        return null;
    }
    public static void addPermissions(String ... permissions){
        for (String permission : permissions) {
            if(need) {
                Permission p = new Permission(Permissions.permissions.size(), permission, false);
                Permissions.permissions.add(p);
            }
        }
    }

    /**
     *  检查用户是否授权
     * @param permission
     * @return
     */
    public static boolean checkPermission(String permission){
        if(need) {
            return findPermission(permission).hasPermission;
        }
        return true;
    }
    public static void requestPermission(Activity activity,Permission permission){
        if(need) {
            RequestPermissionUtil.requestPermission(activity, permission.permission, permission.requestCode);
        }
    }
}
package com.example.deviceinfo.util;

import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;


/**
 * 描述: TODO
 */

public class RequestPermissionUtil {
    /**
     *  @param permission Manifest.permission.***
     * @return
     */
    public static boolean requestPermission(Activity activity,String permission,int requestCode){
        //检查权限: 检查用户是不是已经授权
        int checkSelfPermission = ContextCompat.checkSelfPermission(activity.getApplication(), permission);
        //拒绝 : 检查到用户之前拒绝授权
        if(checkSelfPermission == PackageManager.PERMISSION_DENIED){
            //申请权限
            ActivityCompat.requestPermissions(activity,new String[]{permission},requestCode);
        }else if(checkSelfPermission == PackageManager.PERMISSION_GRANTED){
            //已经授权
            return true;
        }else {
            ActivityCompat.requestPermissions(activity,new String[]{permission},requestCode);
        }
        return false;
    }
}

使用方法

  1. 将三个工具类复制到项目中
  2. 需要在 Activity 中重新下方法, 作用是判断权限是否请求成功 :
@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Permissions.changePermissionState(this,permissions[0],true);
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

3.在Activity onCreate中(或别的地方) 调用 requestPermissionAll 方法将触发申请权限 :
Permissions.requestPermissionAll(this);
4.在工具类 Permissions 中 , 在 initPermissions() 方法中加入所需动态申请的所有权限:

    /**
     * 初始化权限
     */
    private static void initPermissions() {
        if(need) {
            // TODO: 2017/7/28  在此声明所需 动态添加 权限
            addPermission(Manifest.permission.READ_EXTERNAL_STORAGE);// 添加单个权限
            addPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
            addPermissions(//添加多个权限
                    Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.READ_PHONE_STATE
            );
        }
    }

猜你喜欢

转载自blog.csdn.net/weixin_38148680/article/details/79194607
今日推荐