ALERTWINDOW=new String[]{};
SETTINGS=new String[]{};
} else {
CALENDAR = new String[]{
Manifest.permission.READ_CALENDAR,
Manifest.permission.WRITE_CALENDAR};
CAMERA = new String[]{
Manifest.permission.CAMERA};
CONTACTS = new String[]{
Manifest.permission.READ_CONTACTS,
Manifest.permission.WRITE_CONTACTS,
Manifest.permission.GET_ACCOUNTS};
//Android10及以上版本,新增2种权限
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
LOCATION = new String[]{
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION,//在后台获取位置(Android 10.0及以上)
Manifest.permission.ACCESS_MEDIA_LOCATION//读取照片中的地理位置(Android 10.0及以上)
};
}else{
LOCATION = new String[]{
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION};
}
MICROPHONE = new String[]{
Manifest.permission.RECORD_AUDIO};
//Android8以上版本PROCESS_OUTGOING_CALLS换成了ANSWER_PHONE_CALLS。
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
PHONE = new String[]{
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CALL_PHONE,
Manifest.permission.READ_CALL_LOG,
Manifest.permission.WRITE_CALL_LOG,
Manifest.permission.USE_SIP,
Manifest.permission.ADD_VOICEMAIL,
Manifest.permission.ANSWER_PHONE_CALLS,//接听电话(Android8.0及以上)
Manifest.permission.READ_PHONE_NUMBERS//读取手机号码(Android8.0及以上)
};
}else {
PHONE = new String[]{
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CALL_PHONE,
Manifest.permission.READ_CALL_LOG,
Manifest.permission.WRITE_CALL_LOG,
Manifest.permission.USE_SIP,
Manifest.permission.ADD_VOICEMAIL,
Manifest.permission.PROCESS_OUTGOING_CALLS};
}
SENSORS = new String[]{
Manifest.permission.BODY_SENSORS,
Manifest.permission.ACTIVITY_RECOGNITION};
SMS = new String[]{
Manifest.permission.SEND_SMS,
Manifest.permission.RECEIVE_SMS,
Manifest.permission.READ_SMS,
Manifest.permission.RECEIVE_WAP_PUSH,
Manifest.permission.RECEIVE_MMS};
/**
-
外部存储权限
-
Android11以上版本,存储权限统一用MANAGE_EXTERNAL_STORAGE
*/
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R){
STORAGE = new String[]{
Manifest.permission.MANAGE_EXTERNAL_STORAGE};
}else {
STORAGE = new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
}
//安装应用权限(Android8.0及以上)
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){
PACKAGES=new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES};
}else{
PACKAGES = new String[]{};
}
//通知栏权限
NOTIFICATION=new String[]{Manifest.permission.ACCESS_NOTIFICATION_POLICY};
//悬浮窗权限
ALERTWINDOW=new String[]{Manifest.permission.SYSTEM_ALERT_WINDOW};
//系统设置权限
SETTINGS=new String[]{Manifest.permission.WRITE_SETTINGS};
}
}
}
2、创建PermissionUtils.java工具类,这个类主要是封装一些权限的通用方法,代码如下:
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Build;
import androidx.fragment.app.Fragment;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/**
-
权限的工具类
-
@author 安阳 QQ:15577969
-
@version 1.0
-
@team 美奇软件开发工作室
-
@date 2020/11/23 13:09
*/
public class PermissionUtils {
/**
-
判断Android系统版本是否大于6.0
-
@return
*/
public static boolean judgeVersion() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
}
/**
-
从申请的权限中找出未授予的权限
-
@param activity
-
@param permission
-
@return
*/
@TargetApi(value = Build.VERSION_CODES.M)
public static List findDeniedPermissions(Activity activity, String… permission) {
List denyPermissions = new ArrayList<>();
for (String value : permission) {