package com.hdl.photovoltaic.utils; import android.Manifest; import android.app.Activity; import android.content.Context; import android.content.pm.PackageManager; import android.os.Build; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import com.hdl.photovoltaic.R; import com.hdl.photovoltaic.other.HdlDialogLogic; import com.hdl.photovoltaic.other.HdlThreadLogic; import com.hjq.permissions.OnPermissionCallback; import com.hjq.permissions.XXPermissions; import java.util.ArrayList; import java.util.List; public class PermissionUtils { /** * 获取权限成功 */ public static final int STATUS_SUCCESS = 0; /** * 申请权限拒绝, 但是下次申请权限还会弹窗 */ public static final int STATUS_REFUSE = 1; /** * 申请权限拒绝,并且是永久,不会再弹窗 */ public static final int STATUS_REFUSE_PERMANENT = 2; /** * 默认未请求授权状态 */ public static final int STATUS_DEFAULT = 3; /** * 只有activity才可以申请 * * @param activity - * @param strings - */ public static void askPermission(Activity activity, String[] strings) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { List newList = new ArrayList<>(); for (String permission : strings) { boolean flag = checkPermission(activity, permission); if (!flag) { newList.add(permission); } } if (newList.size() > 0) { ActivityCompat.requestPermissions(activity, newList.toArray(new String[0]), STATUS_SUCCESS); } } } /** * 检查一个权限 * * @param activity - * @param permission - * @return - */ public static boolean checkPermission(Activity activity, String permission) { //first we need check this Drive has? CAMERA Permission return ContextCompat.checkSelfPermission(activity, permission) == PackageManager.PERMISSION_GRANTED; } /** * 检查多个权限 * * @param activity - * @param strings - * @return - */ public static String[] checkPermission(Activity activity, String[] strings) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { List newList = new ArrayList<>(); for (String permission : strings) { boolean flag = checkPermission(activity, permission); if (!flag) { newList.add(permission); } } return newList.toArray(new String[0]); } return new String[]{}; } /** * 获取权限状态 */ public static int getPermissionState(Activity activity, String authorize) { int flag = ActivityCompat.checkSelfPermission(activity, authorize); boolean isShould = ActivityCompat.shouldShowRequestPermissionRationale(activity, authorize); if (isShould) { return STATUS_REFUSE; } if (flag == PackageManager.PERMISSION_GRANTED) { //获取到权限 return STATUS_SUCCESS; } if (!SharedPreUtils.contains(authorize)) { return STATUS_DEFAULT; } return STATUS_REFUSE_PERMANENT; } /** * 申请权限有回调 * * @param activity - * @param permission - * @param permissionStateCallback - * @param is_skip 拒绝权限后是否引导到设置那里打开(true=引导) */ public static void requestPermissionsResultCallback(Activity activity, String permission, PermissionState permissionStateCallback, boolean is_skip) { // String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE; int status = PermissionUtils.getPermissionState(activity, permission); switch (status) { case PermissionUtils.STATUS_SUCCESS: if (permissionStateCallback != null) { permissionStateCallback.Success(STATUS_SUCCESS); } break; case PermissionUtils.STATUS_REFUSE: case PermissionUtils.STATUS_DEFAULT: XXPermissions.with(activity) .permission(permission) .request(new OnPermissionCallback() { @Override public void onGranted(List permissions, boolean all) { SharedPreUtils.putBoolean(permission, true); if (permissionStateCallback != null) { permissionStateCallback.Success(STATUS_REFUSE); } } @Override public void onDenied(List permissions, boolean never) { if (is_skip) { SharedPreUtils.putBoolean(permission, true); } } }); break; case PermissionUtils.STATUS_REFUSE_PERMANENT: // if (permissionStateCallback != null) { // permissionStateCallback.Success(STATUS_REFUSE_PERMANENT); // } HdlDialogLogic.getInstance().showSettingPermissionDialog(activity); break; } } public interface PermissionState { void Success(int value); } }