判断用户是否打开通知权限,如果没打开通知权限,根据包名跳转到系统设置页面打开通知权限 亲测好用哦!!!
public class NotificationsUtils { private static final String CHECK_OP_NO_THROW = “checkOpNoThrow”; private static final String OP_POST_NOTIFICATION = “OP_POST_NOTIFICATION”;
@SuppressLint("NewApi") public static boolean isNotificationEnabled(Context context) { 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 (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return false; }}
private void getNotification(){ if (NotificationsUtils.isNotificationEnabled(this)){ AlertDialog.Builder builder = new AlertDialog.Builder(ZH_LoginActivity.this) .setCancelable(true) .setTitle(“检测到通知权限未开启!”) .setMessage(“如果不开启权限会收不到推送通知哦~”) .setNegativeButton(“取消”, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }) .setPositiveButton(“去开启”, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); Intent intent = new Intent(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { intent.setAction(“android.settings.APP_NOTIFICATION_SETTINGS”); intent.putExtra(“android.provider.extra.APP_PACKAGE”, ZH_LoginActivity.this.getPackageName()); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //5.0 intent.setAction(“android.settings.APP_NOTIFICATION_SETTINGS”); intent.putExtra(“app_package”, ZH_LoginActivity.this.getPackageName()); intent.putExtra(“app_uid”, ZH_LoginActivity.this.getApplicationInfo().uid); startActivity(intent); } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) { //4.4 intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(Uri.parse(“package:” + ZH_LoginActivity.this.getPackageName())); } else if (Build.VERSION.SDK_INT >= 15) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(“android.settings.APPLICATION_DETAILS_SETTINGS”); intent.setData(Uri.fromParts(“package”, ZH_LoginActivity.this.getPackageName(), null)); } startActivity(intent); } }); builder.create().show(); } }