赞
踩
参考网址:https://blog.csdn.net/u012556114/article/details/120319874
通过以下代码可直接跳转到项目的通知权限设置界面
- public class NotifyManagerUtils {
- private static final String CHECK_OP_NO_THROW = "checkOpNoThrow";
- private static final String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";
-
- //调用该方法获取是否开启通知栏权限
- public static boolean isNotifyEnabled(Context context) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- return isEnableV26(context);
- } else {
- return isEnabledV19(context);
- }
- }
-
- /**
- * 8.0以下判断
- *
- * @param context api19 4.4及以上判断
- * @return
- */
- private static boolean isEnabledV19(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;
- 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 true;
- }
- }
-
-
- /**
- * 8.0及以上通知权限判断
- *
- * @param context
- * @return
- */
- private static boolean isEnableV26(Context context) {
- ApplicationInfo appInfo = context.getApplicationInfo();
- String pkg = context.getApplicationContext().getPackageName();
- int uid = appInfo.uid;
- try {
- NotificationManager notificationManager = (NotificationManager)
- context.getSystemService(Context.NOTIFICATION_SERVICE);
- @SuppressLint("DiscouragedPrivateApi")
- Method sServiceField = notificationManager.getClass().getDeclaredMethod("getService");
- sServiceField.setAccessible(true);
- Object sService = sServiceField.invoke(notificationManager);
- Method method = null;
- if (sService != null) {
- method = sService.getClass().getDeclaredMethod("areNotificationsEnabledForPackage"
- , String.class, Integer.TYPE);
- method.setAccessible(true);
- }
- return (boolean) method.invoke(sService, pkg, uid);
- } catch (Exception e) {
- return true;
- }
- }
-
- /**
- * 打开通知权限
- *
- * @param context
- */
- public static void openNotificationSettingsForApp(Context context) {
- // Links to this app's notification settings.
- if (isNotifyEnabled(context))
- return;
- Intent intent = new Intent();
- intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
- intent.putExtra("app_package", context.getPackageName());
- intent.putExtra("app_uid", context.getApplicationInfo().uid);
- // for Android 8 and above
- intent.putExtra("android.provider.extra.APP_PACKAGE", context.getPackageName());
- context.startActivity(intent);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。