话不多说,直接上代码,内有备注。
下面这个是请求权限的管理器,里面会有默认的权限请求列表,如果想自定义添加,就在初始化的时候添加所需要申请的权限即可。
/**
* 权限管理类
* 负责检查权限的是否全部拥有
* 申请权限列表里面的权限
*
* @author WGG
* @date 2019/05/21
* @git https://gitee.com/final_static/projects
*/
public class PermissionManager {
//请求权限时的请求码
private final int REQUEST_MULTIPLE_PERMISSION = 100;
//默认申请的权限数组
private static String[] RequiredPermissions = new String[]{
Manifest.permission.RECORD_AUDIO, //录制音频
Manifest.permission.GET_ACCOUNTS, //访问通讯录
Manifest.permission.READ_PHONE_STATE, //获取设备信息
Manifest.permission.CALL_PHONE, //拨打电话和管理童话
Manifest.permission.CAMERA, //拍摄照片和录制视频
Manifest.permission.ACCESS_COARSE_LOCATION, //获取位置信息
Manifest.permission.READ_EXTERNAL_STORAGE, //访问文件
Manifest.permission.WRITE_EXTERNAL_STORAGE, //写入文件
};
//传来的请求权限组,不传的话默认是RequiredPermissions
private String[] initPermissions;
//回调接口对象
private VerifyPermissionsCallback callbackMultiple;
//构造函数
public PermissionManager(String[] initPermissions){
this.initPermissions = initPermissions;
}
//默认构造函数
public PermissionManager(){
this.initPermissions = RequiredPermissions;
}
/**
* 外部调用请求权限入口
*
* @param activity
* @param callback
*/
public void verifyPermissions(Activity activity, VerifyPermissionsCallback callback) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { // 如果SDK版本小于23,无需申请权限
callback.onPermissionAllGranted();
return;
}else {
//还没得到权限的权限数组
String[] denyPermissions = getDenyPermissions(activity);
//判断未获得的权限数组大小是否大于0
if (denyPermissions.length > 0) {
ActivityCompat.requestPermissions(activity, denyPermissions, REQUEST_MULTIPLE_PERMISSION);
this.callbackMultiple = callback;
} else {
if (callback != null) {
callback.onPermissionAllGranted();
}
}
}
}
/**
* 将没获得到的权限放入一个数组并返回
* @param context
* @return
*/
private String[] getDenyPermissions(@NonNull Context context) {
ArrayList<String> denyPermissions = new ArrayList<>();
for (String permission : RequiredPermissions) {
//判断是否有该权限
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
denyPermissions.add(permission);
}
LogUtils.i("权限:需要获取的权限:",""+permission);
LogUtils.i("权限: