From 87cd5df70918e6ba1af849c5f026d3719bfdb1ac Mon Sep 17 00:00:00 2001 From: wjc <1243177876@qq.com> Date: 星期三, 09 四月 2025 09:06:29 +0800 Subject: [PATCH] Merge branch '1.5.2' into dev --- app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 161 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java b/app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java index c970410..ba503bb 100644 --- a/app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java +++ b/app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java @@ -1,24 +1,46 @@ package com.hdl.photovoltaic.utils; import android.app.Activity; +import android.app.AppOpsManager; +import android.app.NotificationManager; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.net.Uri; import android.os.Build; +import android.provider.Settings; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; -import androidx.fragment.app.Fragment; +import com.hdl.photovoltaic.other.HdlDialogLogic; +import com.hjq.permissions.OnPermissionCallback; +import com.hjq.permissions.XXPermissions; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public class PermissionUtils { - /** * 鑾峰彇鏉冮檺鎴愬姛 */ - public static final int STATUS_SUCCESS = 1; + 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鎵嶅彲浠ョ敵璇� @@ -26,7 +48,7 @@ * @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) { @@ -57,7 +79,7 @@ * 妫�鏌ュ涓潈闄� * * @param activity - - * @param strings - + * @param strings -鏉冮檺鐨勬暟鎹� * @return - */ public static String[] checkPermission(Activity activity, String[] strings) { @@ -74,5 +96,138 @@ 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 鎷掔粷鏉冮檺鍚庢槸鍚﹀紩瀵煎埌璁剧疆閭i噷鎵撳紑(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<String> permissions, boolean all) { + SharedPreUtils.putBoolean(permission, true); + if (permissionStateCallback != null) { + 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); + } + } + }); + break; + case PermissionUtils.STATUS_REFUSE_PERMANENT: +// if (permissionStateCallback != null) { +// permissionStateCallback.Success(STATUS_REFUSE_PERMANENT); +// } + if (permissionStateCallback != null) { + permissionStateCallback.Success(STATUS_REFUSE_PERMANENT); + } + if (is_skip) { + HdlDialogLogic.getInstance().showSettingPermissionDialog(activity); + } + break; + } + } + + public interface PermissionState { + void Success(int value); + + } + + + // 妫�鏌ラ�氱煡鏉冮檺鐘舵�� + public static boolean isNotificationEnabled(Context mContext) { + if (mContext == null) { + return false; + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + // Android 8.0 鍙婁互涓婄増鏈� + NotificationManager notificationManager = + (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); + return notificationManager.areNotificationsEnabled(); + } else { + // Android 7.1 鍙婁互涓嬬増鏈� + AppOpsManager appOps = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE); + ApplicationInfo appInfo = mContext.getApplicationInfo(); + String packageName = mContext.getApplicationContext().getPackageName(); + int uid = appInfo.uid; + try { + Class<?> appOpsClass = Class.forName(AppOpsManager.class.getName()); + Method checkOpNoThrowMethod = appOpsClass.getMethod("checkOpNoThrow", Integer.TYPE, + Integer.TYPE, String.class); + Field opPostNotificationValue = appOpsClass.getDeclaredField("OP_POST_NOTIFICATION"); + int value = (int) opPostNotificationValue.get(Integer.class); + return ((int) checkOpNoThrowMethod.invoke(appOps, value, uid, packageName) + == AppOpsManager.MODE_ALLOWED); + } catch (Exception e) { + e.printStackTrace(); + return true; + } + } + } + + // 鎵撳紑閫氱煡鏉冮檺璁剧疆椤甸潰 + public static void openNotificationSettings(Context mContext) { + if (mContext == null) { + return; + } + Intent intent = new Intent(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + // Android 8.0 鍙婁互涓婄増鏈� + intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS); + intent.putExtra(Settings.EXTRA_APP_PACKAGE, mContext.getPackageName()); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + // Android 5.0 鍙婁互涓婄増鏈� + intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS"); + intent.putExtra("app_package", mContext.getPackageName()); + intent.putExtra("app_uid", mContext.getApplicationInfo().uid); + } else { + // Android 5.0 浠ヤ笅鐗堟湰 + intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + intent.addCategory(Intent.CATEGORY_DEFAULT); + intent.setData(Uri.parse("package:" + mContext.getPackageName())); + } + mContext.startActivity(intent); + } + } -- Gitblit v1.8.0