endian11
2020-08-17 044769c589dd509cab6d42a94b056fbe9a877232
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
package safeluck.drive.evaluation.util;
 
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
 
 
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
 
import java.util.ArrayList;
 
/**
 * MyApplication2
 * Created by lzw on 2019/9/9. 17:45:48
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public abstract class PermissionManager {
    private static final String PACKAGE_URL_SCHEME = "package:";
    private Activity mTargetActivity;
 
    /**
     * 权限通过
     * @param requestCode
     */
    public abstract  void authorized(int requestCode);
 
    /**
     * 有权限没通过
     * @param requestCode
     * @param lackPermissions
     */
    public abstract void noAuthorization(int requestCode,String[] lackPermissions);
 
    /**
     * Android 6.0以下的系统不设置校验权限
     */
    public abstract void ignore();
 
    public PermissionManager(Activity targetActivity){
        this.mTargetActivity = targetActivity;
    }
 
    public void checkPermissions(int requestCode,String... permissions){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
            ArrayList<String> lacks = new ArrayList<>();
            for (String permission:permissions){
                if (ContextCompat.checkSelfPermission(mTargetActivity.getApplicationContext(),permission) == PackageManager.PERMISSION_DENIED){
                    lacks.add(permission);
                }
            }
            if (!lacks.isEmpty()){
                //有权限没有授权
                String[] lacksPermissions = new String[lacks.size()];
                lacksPermissions = lacks.toArray(lacksPermissions);
                ActivityCompat.requestPermissions(mTargetActivity,lacksPermissions,requestCode);
            }else{
                authorized(requestCode);
            }
        }else{
            // 6.0以下版本不校验权限
            ignore();
        }
    }
 
    public void recheckPermissions(int requestCode, @NonNull String[] permissions, @NonNull int[] grantReuslts){
        for (int grantResult :
                grantReuslts) {
            if (grantResult == PackageManager.PERMISSION_DENIED) {
                //未授权
                noAuthorization(requestCode,permissions);
            }
        }
        authorized(requestCode);
    }
 
    public static void startAppSettings(Context context){
        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setData(Uri.parse(PACKAGE_URL_SCHEME + context.getApplicationContext().getPackageName() ));
        context.startActivity(intent);
    }
}