一、运行时权限简述。
请点击这里了解更多
二、运行时权限工具类。
package com.mythmayor.demo.utils;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import java.util.ArrayList;
import java.util.List;
public class PermissionManager {
public static final String PERMISSION_CALENDAR = Manifest.permission.WRITE_CALENDAR;
public static final String PERMISSION_CAMERA = Manifest.permission.CAMERA;
public static final String PERMISSION_CONTACTS = Manifest.permission.WRITE_CONTACTS;
public static final String PERMISSION_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;
public static final String PERMISSION_MICROPHONE = Manifest.permission.RECORD_AUDIO;
public static final String PERMISSION_PHONE = Manifest.permission.READ_PHONE_STATE;
public static final String PERMISSION_SENSORS = Manifest.permission.BODY_SENSORS;
public static final String PERMISSION_SMS = Manifest.permission.SEND_SMS;
public static final String PERMISSION_STORAGE = Manifest.permission.WRITE_EXTERNAL_STORAGE;
public static final int REQUEST_CODE_ALL = 0;
public static final int REQUEST_CODE_CALENDAR = 1;
public static final int REQUEST_CODE_CAMERA = 2;
public static final int REQUEST_CODE_CONTACTS = 3;
public static final int REQUEST_CODE_LOCATION = 4;
public static final int REQUEST_CODE_MICROPHONE = 5;
public static final int REQUEST_CODE_PHONE = 6;
public static final int REQUEST_CODE_SENSORS = 7;
public static final int REQUEST_CODE_SMS = 8;
public static final int REQUEST_CODE_STORAGE = 9;
public static final int REQUEST_CODE_CUSTOM = 10;
private boolean isAllPermissionOk = false;
private boolean isCalendarPermissionOk = false;
private boolean isCameraPermissionOk = false;
private boolean isContactsPermissionOk = false;
private boolean isLocationPermissionOk = false;
private boolean isMicrophonePermissionOk = false;
private boolean isPhonePermissionOk = false;
private boolean isSensorsPermissionOk = false;
private boolean isSmsPermissionOk = false;
private boolean isStoragePermissionOk = false;
private boolean isCustomPermissionOk = false;
private List<String> mPermissionList = new ArrayList<>();
private String[] mCustomPermissionArray;
private String[] mAllPermissionArray = new String[]{
PERMISSION_CALENDAR,
PERMISSION_CAMERA,
PERMISSION_CONTACTS,
PERMISSION_LOCATION,
PERMISSION_MICROPHONE,
PERMISSION_PHONE,
PERMISSION_SENSORS,
PERMISSION_SMS,
PERMISSION_STORAGE
};
private static class SingletonHolder {
public static PermissionManager instance = new PermissionManager();
}
private PermissionManager() {
}
public static PermissionManager getInstance() {
return SingletonHolder.instance;
}
public boolean checkAllPermission(Context context) {
isAllPermissionOk = true;
mPermissionList.clear();
for (int i = 0; i < mAllPermissionArray.length; i++) {
if (ContextCompat.checkSelfPermission(context, mAllPermissionArray[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(mAllPermissionArray[i]);
isAllPermissionOk = false;
}
}
return isAllPermissionOk;
}
public void getAllPermission(Activity activity) {
checkAllPermission(activity);
if (mPermissionList.isEmpty()) {
} else {
String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);
ActivityCompat.requestPermissions(activity, permissions, REQUEST_CODE_ALL);
}
}
public void getAllPermission(Fragment fragment) {
checkAllPermission(fragment.getContext());
if (mPermissionList.isEmpty()) {
} else {
String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);
fragment.requestPermissions(permissions, REQUEST_CODE_ALL);
}
}
public boolean checkCustomPermission(Context context, String[] customPermissionArray) {
mCustomPermissionArray = customPermissionArray;
if (mCustomPermissionArray == null || mCustomPermissionArray.length == 0) {
return false;
}
isCustomPermissionOk = true;
mPermissionList.clear();
for (int i = 0; i < mCustomPermissionArray.length; i++) {
if (ContextCompat.checkSelfPermission(context, mCustomPermissionArray[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(mCustomPermissionArray[i]);
isCustomPermissionOk = false;
}
}
return isCustomPermissionOk;
}
public void getCustomPermission(Activity activity, String[] customPermissionArray) {
checkCustomPermission(activity, customPermissionArray);
if (mPermissionList.isEmpty()) {
} else {
String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);
ActivityCompat.requestPermissions(activity, permissions, REQUEST_CODE_CUSTOM);
}
}
public void getCustomPermission(Fragment fragment, String[] customPermissionArray) {
checkCustomPermission(fragment.getContext(), customPermissionArray);
if (mPermissionList.isEmpty()) {
} else {
String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);
fragment.requestPermissions(permissions, REQUEST_CODE_CUSTOM);
}
}
public boolean checkCalendarPermission(Context context) {
int permission = ContextCompat.checkSelfPermission(context, PERMISSION_CALENDAR);
if (permission != PackageManager.PERMISSION_GRANTED) {
isCalendarPermissionOk = false;
} else {
isCalendarPermissionOk = true;
}
return isCalendarPermissionOk;
}
public void getCalendarPermission1(Activity activity) {
if (!checkCalendarPermission(activity)) {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_CALENDAR}, REQUEST_CODE_CALENDAR);
}
}
public void getCalendarPermission1(Fragment fragment) {
if (!checkCalendarPermission(fragment.getContext())) {
fragment.requestPermissions(new String[]{PERMISSION_CALENDAR}, REQUEST_CODE_CALENDAR);
}
}
public void getCalendarPermission2(Activity activity) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_CALENDAR)) {
} else {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_CALENDAR}, REQUEST_CODE_CALENDAR);
}
}
public void getCalendarPermission2(Fragment fragment) {
if (fragment.shouldShowRequestPermissionRationale(PERMISSION_CALENDAR)) {
} else {
fragment.requestPermissions(new String[]{PERMISSION_CALENDAR}, REQUEST_CODE_CALENDAR);
}
}
public boolean checkCameraPermission(Context context) {
int permission = ContextCompat.checkSelfPermission(context, PERMISSION_CAMERA);
if (permission != PackageManager.PERMISSION_GRANTED) {
isCameraPermissionOk = false;
} else {
isCameraPermissionOk = true;
}
return isCameraPermissionOk;
}
public void getCameraPermission1(Activity activity) {
if (!checkCameraPermission(activity)) {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_CAMERA}, REQUEST_CODE_CAMERA);
}
}
public void getCameraPermission1(Fragment fragment) {
if (!checkCameraPermission(fragment.getContext())) {
fragment.requestPermissions(new String[]{PERMISSION_CAMERA}, REQUEST_CODE_CAMERA);
}
}
public void getCameraPermission2(Activity activity) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_CAMERA)) {
} else {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_CAMERA}, REQUEST_CODE_CAMERA);
}
}
public void getCameraPermission2(Fragment fragment) {
if (fragment.shouldShowRequestPermissionRationale(PERMISSION_CAMERA)) {
} else {
fragment.requestPermissions(new String[]{PERMISSION_CAMERA}, REQUEST_CODE_CAMERA);
}
}
public boolean checkContactsPermission(Context context) {
int permission = ContextCompat.checkSelfPermission(context, PERMISSION_CONTACTS);
if (permission != PackageManager.PERMISSION_GRANTED) {
isContactsPermissionOk = false;
} else {
isContactsPermissionOk = true;
}
return isContactsPermissionOk;
}
public void getContactsPermission1(Activity activity) {
if (!checkContactsPermission(activity)) {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_CONTACTS}, REQUEST_CODE_CONTACTS);
}
}
public void getContactsPermission1(Fragment fragment) {
if (!checkContactsPermission(fragment.getContext())) {
fragment.requestPermissions(new String[]{PERMISSION_CONTACTS}, REQUEST_CODE_CONTACTS);
}
}
public void getContactsPermission2(Activity activity) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_CONTACTS)) {
} else {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_CONTACTS}, REQUEST_CODE_CONTACTS);
}
}
public void getContactsPermission2(Fragment fragment) {
if (fragment.shouldShowRequestPermissionRationale(PERMISSION_CONTACTS)) {
} else {
fragment.requestPermissions(new String[]{PERMISSION_CONTACTS}, REQUEST_CODE_CONTACTS);
}
}
public boolean checkLocationPermission(Context context) {
int permission = ContextCompat.checkSelfPermission(context, PERMISSION_LOCATION);
if (permission != PackageManager.PERMISSION_GRANTED) {
isLocationPermissionOk = false;
} else {
isLocationPermissionOk = true;
}
return isLocationPermissionOk;
}
public void getLocationPermission1(Activity activity) {
if (!checkLocationPermission(activity)) {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_LOCATION}, REQUEST_CODE_LOCATION);
}
}
public void getLocationPermission1(Fragment fragment) {
if (!checkLocationPermission(fragment.getContext())) {
fragment.requestPermissions(new String[]{PERMISSION_LOCATION}, REQUEST_CODE_LOCATION);
}
}
public void getLocationPermission2(Activity activity) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_LOCATION)) {
} else {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_LOCATION}, REQUEST_CODE_LOCATION);
}
}
public void getLocationPermission2(Fragment fragment) {
if (fragment.shouldShowRequestPermissionRationale(PERMISSION_LOCATION)) {
} else {
fragment.requestPermissions(new String[]{PERMISSION_LOCATION}, REQUEST_CODE_LOCATION);
}
}
public boolean checkMicrophonePermission(Context context) {
int permission = ContextCompat.checkSelfPermission(context, PERMISSION_MICROPHONE);
if (permission != PackageManager.PERMISSION_GRANTED) {
isMicrophonePermissionOk = false;
} else {
isMicrophonePermissionOk = true;
}
return isMicrophonePermissionOk;
}
public void getMicrophonePermission1(Activity activity) {
if (!checkMicrophonePermission(activity)) {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_MICROPHONE}, REQUEST_CODE_MICROPHONE);
}
}
public void getMicrophonePermission1(Fragment fragment) {
if (!checkMicrophonePermission(fragment.getContext())) {
fragment.requestPermissions(new String[]{PERMISSION_MICROPHONE}, REQUEST_CODE_MICROPHONE);
}
}
public void getMicrophonePermission2(Activity activity) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_MICROPHONE)) {
} else {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_MICROPHONE}, REQUEST_CODE_MICROPHONE);
}
}
public void getMicrophonePermission2(Fragment fragment) {
if (fragment.shouldShowRequestPermissionRationale(PERMISSION_MICROPHONE)) {
} else {
fragment.requestPermissions(new String[]{PERMISSION_MICROPHONE}, REQUEST_CODE_MICROPHONE);
}
}
public boolean checkPhonePermission(Context context) {
int permission = ContextCompat.checkSelfPermission(context, PERMISSION_PHONE);
if (permission != PackageManager.PERMISSION_GRANTED) {
isPhonePermissionOk = false;
} else {
isPhonePermissionOk = true;
}
return isPhonePermissionOk;
}
public void getPhonePermission1(Activity activity) {
if (!checkPhonePermission(activity)) {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_PHONE}, REQUEST_CODE_PHONE);
}
}
public void getPhonePermission1(Fragment fragment) {
if (!checkPhonePermission(fragment.getContext())) {
fragment.requestPermissions(new String[]{PERMISSION_PHONE}, REQUEST_CODE_PHONE);
}
}
public void getPhonePermission2(Activity activity) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_PHONE)) {
} else {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_PHONE}, REQUEST_CODE_PHONE);
}
}
public void getPhonePermission2(Fragment fragment) {
if (fragment.shouldShowRequestPermissionRationale(PERMISSION_PHONE)) {
} else {
fragment.requestPermissions(new String[]{PERMISSION_PHONE}, REQUEST_CODE_PHONE);
}
}
public boolean checkSensorsPermission(Context context) {
int permission = ContextCompat.checkSelfPermission(context, PERMISSION_SENSORS);
if (permission != PackageManager.PERMISSION_GRANTED) {
isSensorsPermissionOk = false;
} else {
isSensorsPermissionOk = true;
}
return isSensorsPermissionOk;
}
public void getSensorsPermission1(Activity activity) {
if (!checkSensorsPermission(activity)) {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_SENSORS}, REQUEST_CODE_SENSORS);
}
}
public void getSensorsPermission1(Fragment fragment) {
if (!checkSensorsPermission(fragment.getContext())) {
fragment.requestPermissions(new String[]{PERMISSION_SENSORS}, REQUEST_CODE_SENSORS);
}
}
public void getSensorsPermission2(Activity activity) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_SENSORS)) {
} else {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_SENSORS}, REQUEST_CODE_SENSORS);
}
}
public void getSensorsPermission2(Fragment fragment) {
if (fragment.shouldShowRequestPermissionRationale(PERMISSION_SENSORS)) {
} else {
fragment.requestPermissions(new String[]{PERMISSION_SENSORS}, REQUEST_CODE_SENSORS);
}
}
public boolean checkSmsPermission(Context context) {
int permission = ContextCompat.checkSelfPermission(context, PERMISSION_SMS);
if (permission != PackageManager.PERMISSION_GRANTED) {
isSmsPermissionOk = false;
} else {
isSmsPermissionOk = true;
}
return isSmsPermissionOk;
}
public void getSmsPermission1(Activity activity) {
if (!checkSmsPermission(activity)) {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_SMS}, REQUEST_CODE_SMS);
}
}
public void getSmsPermission1(Fragment fragment) {
if (!checkSmsPermission(fragment.getContext())) {
fragment.requestPermissions(new String[]{PERMISSION_SMS}, REQUEST_CODE_SMS);
}
}
public void getSmsPermission2(Activity activity) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_SMS)) {
} else {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_SMS}, REQUEST_CODE_SMS);
}
}
public void getSmsPermission2(Fragment fragment) {
if (fragment.shouldShowRequestPermissionRationale(PERMISSION_SMS)) {
} else {
fragment.requestPermissions(new String[]{PERMISSION_SMS}, REQUEST_CODE_SMS);
}
}
public boolean checkStoragePermission(Context context) {
int permission = ContextCompat.checkSelfPermission(context, PERMISSION_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
isStoragePermissionOk = false;
} else {
isStoragePermissionOk = true;
}
return isStoragePermissionOk;
}
public void getStoragePermission1(Activity activity) {
if (!checkStoragePermission(activity)) {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_STORAGE}, REQUEST_CODE_STORAGE);
}
}
public void getStoragePermission1(Fragment fragment) {
if (!checkStoragePermission(fragment.getContext())) {
fragment.requestPermissions(new String[]{PERMISSION_STORAGE}, REQUEST_CODE_STORAGE);
}
}
public void getStoragePermission2(Activity activity) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_STORAGE)) {
} else {
ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_STORAGE}, REQUEST_CODE_STORAGE);
}
}
public void getStoragePermission2(Fragment fragment) {
if (fragment.shouldShowRequestPermissionRationale(PERMISSION_STORAGE)) {
} else {
fragment.requestPermissions(new String[]{PERMISSION_STORAGE}, REQUEST_CODE_STORAGE);
}
}
public boolean isAllPermissionOk() {
return isAllPermissionOk;
}
public boolean isCalendarPermissionOk() {
return isCalendarPermissionOk;
}
public boolean isCameraPermissionOk() {
return isCameraPermissionOk;
}
public boolean isContactsPermissionOk() {
return isContactsPermissionOk;
}
public boolean isLocationPermissionOk() {
return isLocationPermissionOk;
}
public boolean isMicrophonePermissionOk() {
return isMicrophonePermissionOk;
}
public boolean isPhonePermissionOk() {
return isPhonePermissionOk;
}
public boolean isSensorsPermissionOk() {
return isSensorsPermissionOk;
}
public boolean isSmsPermissionOk() {
return isSmsPermissionOk;
}
public boolean isStoragePermissionOk() {
return isStoragePermissionOk;
}
public boolean isCustomPermissionOk() {
return isCustomPermissionOk;
}
}