mac
2023-12-05 b2d2e6dcf6ec38a2f24721f2bc925d634a6eb78d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
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.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<String> 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<String> 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 getAuthorizeStaus(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 -
     */
    public static void applyForRight(Activity activity, String permission, PermissionState permissionStateCallback) {
//        String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
        int status = PermissionUtils.getAuthorizeStaus(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<String> permissions, boolean all) {
                                SharedPreUtils.putBoolean(permission, true);
                                if (permissionStateCallback != null) {
                                    permissionStateCallback.Success(STATUS_REFUSE);
                                }
                            }
 
                            @Override
                            public void onDenied(List<String> permissions, boolean never) {
                                SharedPreUtils.putBoolean(permission, true);
                            }
                        });
                break;
            case PermissionUtils.STATUS_REFUSE_PERMANENT:
                if (permissionStateCallback != null) {
                    permissionStateCallback.Success(STATUS_REFUSE_PERMANENT);
                }
 
                break;
        }
    }
 
    public interface PermissionState {
        void Success(int value);
 
    }
 
 
}