From cf7ac284e5c8675c9a89e9d613b3f4effb875c16 Mon Sep 17 00:00:00 2001 From: wjc <1243177876@qq.com> Date: 星期五, 06 十二月 2024 12:39:25 +0800 Subject: [PATCH] 2024年12月06日12:39:21 --- app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java | 106 ++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 85 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 8237d46..2aa33c7 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; @@ -43,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) { @@ -116,8 +121,9 @@ * @param activity - * @param permission - * @param permissionStateCallback - + * @param is_skip 鎷掔粷鏉冮檺鍚庢槸鍚﹀紩瀵煎埌璁剧疆閭i噷鎵撳紑(true=寮曞) */ - public static void requestPermissionsResultCallback(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.getPermissionState(activity, permission); switch (status) { @@ -128,28 +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) { - 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; } } @@ -160,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