From d1ebb94e1a17b7c25d4fcf73d85345d92cc86b5c Mon Sep 17 00:00:00 2001
From: mac <user@users-MacBook-Pro.local>
Date: 星期二, 02 一月 2024 18:41:34 +0800
Subject: [PATCH] 2024年01月02日18:41:32

---
 app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java |  103 +++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 82 insertions(+), 21 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 ff6a2d8..cbc69e5 100644
--- a/app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java
+++ b/app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java
@@ -1,20 +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.HdlDialogLogic;
-import com.hdl.photovoltaic.other.HdlThreadLogic;
 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;
 
@@ -129,30 +134,30 @@
                 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_REFUSE);
+                        }
+                    }
 
-                            @Override
-                            public void onDenied(List<String> permissions, boolean never) {
-                                if (is_skip) {
-                                    SharedPreUtils.putBoolean(permission, true);
-                                }
-                            }
-                        });
+                    @Override
+                    public void onDenied(List<String> permissions, boolean never) {
+                        if (is_skip) {
+                            SharedPreUtils.putBoolean(permission, true);
+                        }
+                    }
+                });
                 break;
             case PermissionUtils.STATUS_REFUSE_PERMANENT:
 //                if (permissionStateCallback != null) {
 //                    permissionStateCallback.Success(STATUS_REFUSE_PERMANENT);
 //                }
-                HdlDialogLogic.getInstance().showSettingPermissionDialog(activity);
+                if (is_skip) {
+                    HdlDialogLogic.getInstance().showSettingPermissionDialog(activity);
+                }
                 break;
         }
     }
@@ -163,4 +168,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