package com.doumee.lib_coremodel.util; import android.app.AppOpsManager; import android.content.Context; import android.content.pm.ApplicationInfo; import android.os.Build; import androidx.annotation.RequiresApi; import androidx.core.app.NotificationManagerCompat; import com.doumee.lib_coremodel.http.utils.GsonTools; import java.lang.reflect.Field; import java.lang.reflect.Method; public class CommonUtils { //判断该app是否打开了通知 /** * 可以通过NotificationManagerCompat 中的 areNotificationsEnabled()来判断是否开启通知权限。NotificationManagerCompat 在 android.support.v4.app包中,是API 22.1.0 中加入的。而 areNotificationsEnabled()则是在 API 24.1.0之后加入的。 * areNotificationsEnabled 只对 API 19 及以上版本有效,低于API 19 会一直返回true * */ @RequiresApi(api = Build.VERSION_CODES.KITKAT) public static boolean isNotificationEnabled(Context context) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){ NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context); boolean areNotificationsEnabled = notificationManagerCompat.areNotificationsEnabled(); return areNotificationsEnabled; } String CHECK_OP_NO_THROW = "checkOpNoThrow"; String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION"; AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); ApplicationInfo appInfo = context.getApplicationInfo(); String pkg = context.getApplicationContext().getPackageName(); int uid = appInfo.uid; Class appOpsClass = null; /* Context.APP_OPS_MANAGER */ try { appOpsClass = Class.forName(AppOpsManager.class.getName()); Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, String.class); Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION); int value = (Integer) opPostNotificationValue.get(Integer.class); return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED); } catch (Exception e) { e.printStackTrace(); } return false; } public static boolean isEquals(Object o1,Object o2){ String s1 = GsonTools.changeGsonToJson(o1); String s2 = GsonTools.changeGsonToJson(o2); return s1.hashCode() == s2.hashCode(); } }