/** 常用权限(可能不全) **/
// SMS(短信)
// SEND_SMS
// RECEIVE_SMS
// READ_SMS
// RECEIVE_WAP_PUSH
// RECEIVE_MMS
// STORAGE(存储卡-读写权限)
// READ_EXTERNAL_STORAGE
// WRITE_EXTERNAL_STORAGE
// CONTACTS(联系人)
// READ_CONTACTS
// WRITE_CONTACTS
// GET_ACCOUNTS
// PHONE(手机)
// READ_PHONE_STATE
// CALL_PHONE
// READ_CALL_LOG
// WRITE_CALL_LOG
// ADD_VOICEMAIL
// USE_SIP
// PROCESS_OUTGOING_CALLS
// CALENDAR(日历)
// READ_CALENDAR
// WRITE_CALENDAR
// CAMERA(相机)
// CAMERA
// LOCATION(位置)
// ACCESS_FINE_LOCATION
// ACCESS_COARSE_LOCATION
// SENSORS(传感器)
// BODY_SENSORS
// MICROPHONE(麦克风)
// RECORD_AUDIO
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils;
import com.shawyo.gzh.wisdompark.MyApplication;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
/**
* created by Administrator
* on 2020/4/16 0016
* Describe:gzh 可自己添加自己需要的权限
*/
public class PermissionsUtils {
public static final int REQUEST_CODE = 1111;
/**
* 录音需要的权限
*/
public static String[]permissionsRecord={
Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
/**
* 读写权限
*/
public static String[]permissionsREAD={
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
};
/**
* 读写权限+相机权限
*/
public static String[]permissionsREADAndCamera={
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA
};
/**
* 定位权限
*/
public static String[]permissionsPositioning={
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
};
/**
* 拨打电话权限
*/
public static String[]permissionsCallPhone={
Manifest.permission.CALL_PHONE,
};
private String[]mPermissions;
private static Activity mActivity;
public PermissionsUtils(Activity activity) {
mActivity = activity;
}
public static PermissionsUtils from(Activity activity){
return new PermissionsUtils(activity);
}
public boolean setPermissions(String[] permissions) {
this.mPermissions = permissions;
return lacksPermissions();
}
/**
* 判断权限集合
* permissions 权限数组
* return true-表示权限已开启 false-表示没有改权限
*/
public boolean lacksPermissions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
for (String permission : mPermissions) {
if (lacksPermission(permission)) {
ActivityCompat.requestPermissions(mActivity, mPermissions, REQUEST_CODE);
forResult();
return false;
}
}
return true;
}else {
return true;
}
}
/**
* 判断是否缺少权限
*/
private boolean lacksPermission(String permission) {
return ContextCompat.checkSelfPermission(mActivity, permission) ==
PackageManager.PERMISSION_DENIED;
}
public void forResult(){
ActivityCompat.requestPermissions(mActivity,mPermissions,REQUEST_CODE);
}
/**
* 回调
* @param requestCode
* @param permissions
* @param grantResults
* @param isStart 是否跳转开启权限界面 true跳转 false 不跳转
* @return
*/
public static boolean onPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults,boolean isStart) {
boolean bool = true;
if (requestCode == PermissionsUtils.REQUEST_CODE){
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] == -1){
bool = false;
//这里就写了几个权限的判断,可根据自己实际需求进行代码编写 T 我封装的Toast类
if (TextUtils.equals(permissions[i],Manifest.permission.READ_EXTERNAL_STORAGE)
|| TextUtils.equals(permissions[i],Manifest.permission.WRITE_EXTERNAL_STORAGE)){
T.showShort(mActivity,"请开启手机读写权限");
}else if ( TextUtils.equals(permissions[i],Manifest.permission.CAMERA)){
T.showShort(MyApplication.getContextObject(),"请开启手机相机权限");
}else if ( TextUtils.equals(permissions[i],Manifest.permission.ACCESS_COARSE_LOCATION)
|| TextUtils.equals(permissions[i],Manifest.permission.ACCESS_FINE_LOCATION)){
T.showShort(MyApplication.getContextObject(),"请开启手机定位权限");
}else if ( TextUtils.equals(permissions[i],Manifest.permission.CALL_PHONE)){
T.showShort(MyApplication.getContextObject(),"请开启手机拨号权限");
}
if (isStart){
//跳转到系统开启权限界面
start();
}
break;
}
}
if (grantResults.length>0 && bool){
bool = true;
}else {
bool = false;
}
}else {
bool = false;
}
return bool;
}
//跳转
private static void start(){
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + mActivity.getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
mActivity.startActivity(intent);
}
}
//Activity使用 我这里用了手机读写权限和相机权限,可根据自己的需求添加不同权限
if (PermissionsUtils.from(this).setPermissions(PermissionsUtils.permissionsREADAndCamera)){ //权限开启,进行下一步操作 }
//回调 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (PermissionsUtils.onPermissionsResult(requestCode,permissions,grantResults,true)){ //进行权限已开启后的操作-跟上面的“下一步”操作一样 } }