importandroid.app.AppOpsManager;importandroid.app.NotificationManager;importandroid.content.Context;importandroid.content.pm.ApplicationInfo;importandroid.os.Build;importandroid.support.annotation.RequiresApi;importandroid.support.v4.app.NotificationManagerCompat;importjava.lang.reflect.Field;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;public classNotificationsCheckUtil {public static booleanareNotificationsEnabled(Context context) {
NotificationManagerCompat.from(context).areNotificationsEnabled();if (Build.VERSION.SDK_INT
}if (Build.VERSION.SDK_INT
}else{returnisEnableV26(context);
}
}
@RequiresApi(api=Build.VERSION_CODES.KITKAT)private static booleanisEnableV19(Context context) {final String CHECK_OP_NO_THROW = "checkOpNoThrow";final 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 = (int) opPostNotificationValue.get(Integer.class);return ((int) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) ==AppOpsManager.MODE_ALLOWED);
}catch(ClassNotFoundException e) {
}catch(NoSuchMethodException e) {
}catch(NoSuchFieldException e) {
}catch(InvocationTargetException e) {
}catch(IllegalAccessException e) {
}catch(Exception e) {
}return false;
}private static booleanisEnableV26(Context context) {
ApplicationInfo appInfo=context.getApplicationInfo();
String pkg=context.getApplicationContext().getPackageName();int uid =appInfo.uid;try{
NotificationManager notificationManager=(NotificationManager)
context.getSystemService(Context.NOTIFICATION_SERVICE);
Method sServiceField= notificationManager.getClass().getDeclaredMethod("getService");
sServiceField.setAccessible(true);
Object sService=sServiceField.invoke(notificationManager);
Method method= sService.getClass().getDeclaredMethod("areNotificationsEnabledForPackage", String.class, Integer.TYPE);
method.setAccessible(true);return (boolean) method.invoke(sService, pkg, uid);
}catch(Exception e) {return true;
}
}
}