android 6.0 动态申请(单一或多个)权限工具
<!--AndroidManifest 添加以下权限-->
<!--定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--存储-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--相机-->
<uses-permission android:name="android.permission.CAMERA" />
package com.zhou.baseapp.utils;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.util.List;
/**
* Created by ${hj-zhou} on 2020年5月16日 0016
*
* @author hj-zhou
*/
public class PermissionUtil {
private static final String TAG = "PermissionUtil";
/**
***多权限
* @param activity 申请页面
* @param permission 申请权限组
* @param permissionList 未授权限组
*/
public void checkPermission(Activity activity, String[] permission, List<String> permissionList){
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M){
for (int i = 0; i < permission.length; i++) {
if(ContextCompat.checkSelfPermission(activity, permission[i]) != PackageManager.PERMISSION_GRANTED){
permissionList.add(permission[i]);
}
}
if(permissionList.size() > 0){
requestPermission(activity, permissionList);
permissionList.clear();
}else {
finishPermission(activity, permission);
Log.i(TAG, "checkPermission: 已授权");
}
}
}
/**
***多权限
* @param activity 申请页面
* @param permissionList 未授权限组
*/
private void requestPermission(Activity activity, List<String> permissionList){
ActivityCompat.requestPermissions(activity, permissionList.toArray(new String[permissionList.size()]), Constants.REQUEST_CODE);
}
/**
***多权限
* @param activity 申请页面
* @param permission 已授权限组
*/
private void finishPermission(Activity activity,String[] permission){
ActivityCompat.requestPermissions(activity, permission, Constants.FINISH_REQUEST_CODE);
}
/**
* 检查GPS是否打开
* @param context
* @return
*/
public static boolean checkGPSIsOpen(Context context) {
if (Build.VERSION.SDK_INT >= 19) {
int flag;
try {
flag = Settings.Secure.getInt(context.getContentResolver(), "location_mode");
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
return false;
}
return flag != 0;
} else {
String location_providers_allowed = Settings.Secure.getString(context.getContentResolver(), "location_providers_allowed");
return !TextUtils.isEmpty(location_providers_allowed);
}
}
/**
* 检查单个权限(存储)
* @param activity
* @return
*/
public static boolean checkStoragePermission(Activity activity) {
int flag = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
return flag == 0;
}
/**
* 申请单个权限(存储)
* @param context
* @param code
*/
public static void verifyStoragePermissions(Context context, int code) {
int flag = ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (flag != 0) {
String[] permissions = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
ActivityCompat.requestPermissions((Activity)context, permissions, code);
}
}
/**
* 检查单个权限(相机)
* @param context
* @return
*/
public static boolean checkCameraPermission(Context context) {
int flag = ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA);
return flag == 0;
}
/**
* 申请单个权限(相机)
* @param context
* @param code
*/
public static void verifyCameraPermissions(Context context, int code) {
int flag = ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA);
if (flag != 0) {
String[] permissions = new String[]{Manifest.permission.CAMERA};
ActivityCompat.requestPermissions((Activity)context, permissions, code);
}
}
}
使用在需要申请的Activity中:
多个权限:new PermissionUtil().checkPermission(MainActivity.this, Constants.PERMISSION, permissionList);
单一权限:
申请:PermissionUtil.verifyCameraPermissions(MainActivity.this,0x01);
检查:PermissionUtil.checkCameraPermission(MainActivity.this);
然后重写:onRequestPermissionsResult 方法。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case Constants.REQUEST_CODE:
if (grantResults.length > 0) {
for (int i = 0; i < grantResults.length; i++) {
switch (permissions[i]) {
case Manifest.permission.ACCESS_FINE_LOCATION:
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
Log.i(TAG, "onRequestPermissionsResult: 定位已授权");
}else {
Log.i(TAG, "onRequestPermissionsResult: 定位未授权");
}
break;
case Manifest.permission.WRITE_EXTERNAL_STORAGE:
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
Log.i(TAG, "onRequestPermissionsResult: 存储已授权");
}else {
Log.i(TAG, "onRequestPermissionsResult: 存储未授权");
}
break;
default:
break;
}
}
}
break;
case Constants.FINISH_REQUEST_CODE:
Log.i(TAG, "onRequestPermissionsResult: 已授权 ");
break;
case 0x01:
break;
default:
break;
}
}
/*** 常量类 ***/
public class Constants {
/*** 申请权限 ***/
public static final String[] PERMISSION = {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
};
/*** 授权回调 ***/
public static final int REQUEST_CODE = 100;
/*** 已授权回调 ***/
public static final int FINISH_REQUEST_CODE = 101;
/*** 授权页面回调 ***/
public static final int SETTING_CODE = 102;
}
/**********若需其他权限,自行替换即可***********/