一、運行時權限簡述。
請點擊這裏瞭解更多
二、運行時權限工具類。
package com.mythmayor.demo.utils;
import android.Manifest;
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;
import java.util.ArrayList;
import java.util.List;
public class PermissionManager {
private static Context mContext;
public static final String PERMISSION_CALENDAR = Manifest.permission.READ_CALENDAR;
public static final String PERMISSION_CAMERA = Manifest.permission.CAMERA;
public static final String PERMISSION_CONTACTS = Manifest.permission.READ_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.READ_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(Context context) {
mContext = context;
return SingletonHolder.instance;
}
public boolean checkAllPermission() {
isAllPermissionOk = true;
mPermissionList.clear();
for (int i = 0; i < mAllPermissionArray.length; i++) {
if (ContextCompat.checkSelfPermission(mContext, mAllPermissionArray[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(mAllPermissionArray[i]);
isAllPermissionOk = false;
}
}
return isAllPermissionOk;
}
public void getAllPermission() {
checkAllPermission();
if (mPermissionList.isEmpty()) {
} else {
String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);
ActivityCompat.requestPermissions((Activity) mContext, permissions, REQUEST_CODE_ALL);
}
}
public boolean checkCustomPermission(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(mContext, mCustomPermissionArray[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(mCustomPermissionArray[i]);
isCustomPermissionOk = false;
}
}
return isCustomPermissionOk;
}
public void getCustomPermission(String[] customPermissionArray) {
checkCustomPermission(customPermissionArray);
if (mPermissionList.isEmpty()) {
} else {
String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);
ActivityCompat.requestPermissions((Activity) mContext, permissions, REQUEST_CODE_CUSTOM);
}
}
public boolean checkCalendarPermission() {
int permission = ActivityCompat.checkSelfPermission(mContext, PERMISSION_CALENDAR);
if (permission != PackageManager.PERMISSION_GRANTED) {
isCalendarPermissionOk = false;
} else {
isCalendarPermissionOk = true;
}
return isCalendarPermissionOk;
}
public void getCalendarPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, PERMISSION_CALENDAR)) {
} else {
ActivityCompat.requestPermissions((Activity) mContext, new String[]{PERMISSION_CALENDAR}, REQUEST_CODE_CALENDAR);
}
}
public boolean checkCameraPermission() {
int permission = ActivityCompat.checkSelfPermission(mContext, PERMISSION_CAMERA);
if (permission != PackageManager.PERMISSION_GRANTED) {
isCameraPermissionOk = false;
} else {
isCameraPermissionOk = true;
}
return isCameraPermissionOk;
}
public void getCameraPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, PERMISSION_CAMERA)) {
} else {
ActivityCompat.requestPermissions((Activity) mContext, new String[]{PERMISSION_CAMERA}, REQUEST_CODE_CAMERA);
}
}
public boolean checkContactsPermission() {
int permission = ActivityCompat.checkSelfPermission(mContext, PERMISSION_CONTACTS);
if (permission != PackageManager.PERMISSION_GRANTED) {
isContactsPermissionOk = false;
} else {
isContactsPermissionOk = true;
}
return isContactsPermissionOk;
}
public void getContactsPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, PERMISSION_CONTACTS)) {
} else {
ActivityCompat.requestPermissions((Activity) mContext, new String[]{PERMISSION_CONTACTS}, REQUEST_CODE_CONTACTS);
}
}
public boolean checkLocationPermission() {
int permission = ActivityCompat.checkSelfPermission(mContext, PERMISSION_LOCATION);
if (permission != PackageManager.PERMISSION_GRANTED) {
isLocationPermissionOk = false;
} else {
isLocationPermissionOk = true;
}
return isLocationPermissionOk;
}
public void getLocationPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, PERMISSION_LOCATION)) {
} else {
ActivityCompat.requestPermissions((Activity) mContext, new String[]{PERMISSION_LOCATION}, REQUEST_CODE_LOCATION);
}
}
public boolean checkMicrophonePermission() {
int permission = ActivityCompat.checkSelfPermission(mContext, PERMISSION_MICROPHONE);
if (permission != PackageManager.PERMISSION_GRANTED) {
isMicrophonePermissionOk = false;
} else {
isMicrophonePermissionOk = true;
}
return isMicrophonePermissionOk;
}
public void getMicrophonePermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, PERMISSION_MICROPHONE)) {
} else {
ActivityCompat.requestPermissions((Activity) mContext, new String[]{PERMISSION_MICROPHONE}, REQUEST_CODE_MICROPHONE);
}
}
public boolean checkPhonePermission() {
int permission = ActivityCompat.checkSelfPermission(mContext, PERMISSION_PHONE);
if (permission != PackageManager.PERMISSION_GRANTED) {
isPhonePermissionOk = false;
} else {
isPhonePermissionOk = true;
}
return isPhonePermissionOk;
}
public void getPhonePermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, PERMISSION_PHONE)) {
} else {
ActivityCompat.requestPermissions((Activity) mContext, new String[]{PERMISSION_PHONE}, REQUEST_CODE_PHONE);
}
}
public boolean checkSensorsPermission() {
int permission = ActivityCompat.checkSelfPermission(mContext, PERMISSION_SENSORS);
if (permission != PackageManager.PERMISSION_GRANTED) {
isSensorsPermissionOk = false;
} else {
isSensorsPermissionOk = true;
}
return isSensorsPermissionOk;
}
public void getSensorsPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, PERMISSION_SENSORS)) {
} else {
ActivityCompat.requestPermissions((Activity) mContext, new String[]{PERMISSION_SENSORS}, REQUEST_CODE_SENSORS);
}
}
public boolean checkSmsPermission() {
int permission = ActivityCompat.checkSelfPermission(mContext, PERMISSION_SMS);
if (permission != PackageManager.PERMISSION_GRANTED) {
isSmsPermissionOk = false;
} else {
isSmsPermissionOk = true;
}
return isSmsPermissionOk;
}
public void getSmsPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, PERMISSION_SMS)) {
} else {
ActivityCompat.requestPermissions((Activity) mContext, new String[]{PERMISSION_SMS}, REQUEST_CODE_SMS);
}
}
public boolean checkStoragePermission() {
int permission = ActivityCompat.checkSelfPermission(mContext, PERMISSION_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
isStoragePermissionOk = false;
} else {
isStoragePermissionOk = true;
}
return isStoragePermissionOk;
}
public void getStoragePermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, PERMISSION_STORAGE)) {
} else {
ActivityCompat.requestPermissions((Activity) mContext, 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;
}
}