美文网首页Android适配
Android获取通知状态栏

Android获取通知状态栏

作者: dashingqi | 来源:发表于2019-05-16 20:44 被阅读0次

背景

  • 最近在搞消息的推送,用的是腾讯的信鸽推送。用户自己是不知道去开启通知栏的,只能通过程序去提示用户去手动开启状态栏。下面的代码是我本次集成到项目中去的核心代码。经过测试 在 8.0 9.0 也是可以。

核心代码

  • 获取通知状态拦开启状态
    // 用来判断通知权限是否开启了
   public static boolean isPermissionOpen(Context context) {
        // 这是8.0 以及以后版本做的处理,来获取是否开启
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            return NotificationManagerCompat.from(context).getImportance() != NotificationManager.IMPORTANCE_NONE;
        }
        // 8.0 一下版本获取开启状态
        return NotificationManagerCompat.from(context).areNotificationsEnabled();
    }
  • 不同版本区间做不同的页面跳转设置
  Intent localIntent = new Intent();
  localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
      localIntent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
      localIntent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
    } else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP &&
      android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
      localIntent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
      localIntent.putExtra("app_package", getPackageName());
      localIntent.putExtra("app_uid", getApplicationInfo().uid);
     } else if (android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
         localIntent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
         localIntent.addCategory(Intent.CATEGORY_DEFAULT);
         localIntent.setData(Uri.parse("package:" + getPackageName()));
      } else {
         ///< 4.4以下没有从app跳转到应用通知设置页面的Action,可考虑跳转到应用详情页面,
          localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          if (Build.VERSION.SDK_INT >= 9) {
              localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
              localIntent.setData(Uri.fromParts("package", getPackageName(), null));
           } else if (Build.VERSION.SDK_INT <= 8) {
              localIntent.setAction(Intent.ACTION_VIEW);
              localIntent.setClassName("com.android.settings", "com.android.setting.InstalledAppDetails");
              localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName());
            }
       }
 startActivity(localIntent);

相关文章

网友评论

    本文标题:Android获取通知状态栏

    本文链接:https://www.haomeiwen.com/subject/doewaqtx.html