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 | 119 +++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 95 insertions(+), 24 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 05376c3..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,19 +1,25 @@ package com.hdl.photovoltaic.utils; -import android.Manifest; 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 com.hdl.photovoltaic.R; -import com.hdl.photovoltaic.other.HdlThreadLogic; +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.List; @@ -42,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) { @@ -73,7 +79,7 @@ * 妫�鏌ュ涓潈闄� * * @param activity - - * @param strings - + * @param strings -鏉冮檺鐨勬暟鎹� * @return - */ public static String[] checkPermission(Activity activity, String[] strings) { @@ -93,7 +99,7 @@ /** * 鑾峰彇鏉冮檺鐘舵�� */ - public static int getAuthorizeStaus(Activity activity, String authorize) { + public static int getPermissionState(Activity activity, String authorize) { int flag = ActivityCompat.checkSelfPermission(activity, authorize); boolean isShould = ActivityCompat.shouldShowRequestPermissionRationale(activity, authorize); if (isShould) { @@ -115,10 +121,11 @@ * @param activity - * @param permission - * @param permissionStateCallback - + * @param is_skip 鎷掔粷鏉冮檺鍚庢槸鍚﹀紩瀵煎埌璁剧疆閭i噷鎵撳紑(true=寮曞) */ - public static void applyForRight(Activity activity, String permission, PermissionState permissionStateCallback) { + public static void requestPermissionsResultCallback(Activity activity, String permission, PermissionState permissionStateCallback, boolean is_skip) { // String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE; - int status = PermissionUtils.getAuthorizeStaus(activity, permission); + int status = PermissionUtils.getPermissionState(activity, permission); switch (status) { case PermissionUtils.STATUS_SUCCESS: if (permissionStateCallback != null) { @@ -127,28 +134,36 @@ 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); - } - } + 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) { - SharedPreUtils.putBoolean(permission, true); - } - }); + @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; } } @@ -159,4 +174,60 @@ } + // 妫�鏌ラ�氱煡鏉冮檺鐘舵�� + 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