wjc
2026-03-19 b2340ac4ce1c9ea2070c0e7fb72a03fb2b2500ad
app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java
@@ -1,7 +1,9 @@
package com.hdl.photovoltaic.utils;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.app.Application;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
@@ -14,6 +16,7 @@
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.hdl.photovoltaic.HDLApp;
import com.hdl.photovoltaic.other.HdlDialogLogic;
import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.XXPermissions;
@@ -113,6 +116,14 @@
     */
    public static int getPermissionState(Activity activity, String authorize) {
        int flag = ActivityCompat.checkSelfPermission(activity, authorize);
        //此时需要判断是否是"永久拒绝"
        //当前isShould =false;
        // 永久拒绝(用户勾选了"不再询问")
        // 或者是在某些特殊场景下(如设备策略限制)
        // 这种情况再次 requestPermissions() 也不会弹窗,必须引导用户去设置页面手动开启
        //当前isShould =true;
        // 普通拒绝(用户只是点了拒绝,没有勾选"不再询问")
        // 这种情况再次 requestPermissions() 还会弹窗
        boolean isShould = ActivityCompat.shouldShowRequestPermissionRationale(activity, authorize);
        if (isShould) {
            return STATUS_REFUSE;
@@ -127,6 +138,42 @@
        return STATUS_REFUSE_PERMANENT;
    }
    /**
     * 获取权限状态( 权限检查结果对比)
     *
     * @param activity  活动
     * @param authorize 权限名称
     * @return (0=授予权限;1=普通拒绝(用户只是点了拒绝,没有勾选"不再询问");2=永久拒绝(用户勾选了"不再询问");3=首次申请)
     */
    public static int getPermissionStateV2(Activity activity, String authorize) {
        int flag = ActivityCompat.checkSelfPermission(activity, authorize);
        // 情况 1: 用户授予权限
        if (flag == PackageManager.PERMISSION_GRANTED) {
            //获取到权限
            return STATUS_SUCCESS;
        }
        if (!SharedPreUtils.contains(authorize)) {
            SharedPreUtils.putBoolean(authorize, true);
            //首次申请
            return STATUS_DEFAULT;
        }
        // 情况 2: 用户拒绝权限(包括首次拒绝、永久拒绝)
        if (flag == PackageManager.PERMISSION_DENIED) {
            boolean isShould = ActivityCompat.shouldShowRequestPermissionRationale(activity, authorize);
            if (isShould) {
                // 普通拒绝(用户只是点了拒绝,没有勾选"不再询问")
                // 这种情况再次 requestPermissions() 还会弹窗
                return STATUS_REFUSE;
            } else {
                // 永久拒绝(用户勾选了"不再询问");【注意:有些手机没有“不再询问”选项,点击两次以上拒绝,就会变成永久拒绝】
                // 或者是在某些特殊场景下(如设备策略限制)
                // 这种情况再次 requestPermissions() 也不会弹窗,必须引导用户去设置页面手动开启
                return STATUS_REFUSE_PERMANENT;
            }
        }
        return STATUS_REFUSE;
    }
    /**
     * 申请权限有回调