| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | * @param activity - |
| | | * @param strings - |
| | | */ |
| | | public static void askPermission(Activity activity, String[] strings) { |
| | | public static void activityPermission(Activity activity, String[] strings) { |
| | | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { |
| | | List<String> newList = new ArrayList<>(); |
| | | for (String permission : strings) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 检查一个权限 |
| | | * |
| | | * @param context - |
| | | * @param permission - |
| | | * @return - |
| | | */ |
| | | public static boolean checkPermission(Context context, String permission) { |
| | | //first we need check this Drive has? CAMERA Permission |
| | | return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED; |
| | | } |
| | | |
| | | /** |
| | | * 检查多个权限 |
| | | * |
| | | * @param activity - |
| | | * @param strings - |
| | | * @param strings -权限的数据 |
| | | * @return - |
| | | */ |
| | | public static String[] checkPermission(Activity activity, String[] strings) { |
| | |
| | | */ |
| | | 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; |
| | |
| | | } |
| | | 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; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 申请权限有回调 |
| | |
| | | public void onGranted(List<String> permissions, boolean all) { |
| | | SharedPreUtils.putBoolean(permission, true); |
| | | if (permissionStateCallback != null) { |
| | | permissionStateCallback.Success(STATUS_REFUSE); |
| | | permissionStateCallback.Success(STATUS_SUCCESS); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onDenied(List<String> permissions, boolean never) { |
| | | if (permissionStateCallback != null) { |
| | | permissionStateCallback.Success(STATUS_REFUSE); |
| | | } |
| | | if (is_skip) { |
| | | SharedPreUtils.putBoolean(permission, true); |
| | | } |
| | |
| | | // if (permissionStateCallback != null) { |
| | | // permissionStateCallback.Success(STATUS_REFUSE_PERMANENT); |
| | | // } |
| | | if (permissionStateCallback != null) { |
| | | permissionStateCallback.Success(STATUS_REFUSE_PERMANENT); |
| | | } |
| | | if (is_skip) { |
| | | HdlDialogLogic.getInstance().showSettingPermissionDialog(activity); |
| | | } |