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