美文网首页Android技术知识Android开发经验谈android实用技术
Android 通知检测以及跳转(系统适配)

Android 通知检测以及跳转(系统适配)

作者: 乐之飞于 | 来源:发表于2018-09-09 19:56 被阅读76次

    Push的到达与否,和系统的通知开关以及精确定位推送数据有很大关系!所以,本周调研了下android厂商以及系统的api!

    一般情况下,Api 19 以前是没有通知管理的,默认都是开启,不用管。
    Api 19 – 24 虽加入了通知管理功能,但没有开放检测是否开启了通知的接口,开发者只能用反射来获取权限值。
    Api 24 以上,NotificationManager 提供了 areNotificationsEnabled()方法检测通知权限。
    support 包已经考虑了以上场景,在 24.1.0 开放了areNotificationsEnabled(),在19以下默认返回true,19-24返回对应反射值,24以上用原生NotificationManager 检测。


    特殊情况是部分国产机,加入了通知相关定制功能,开发者是无从控制的或检测的,完全瞎子。比如下面这种通知是否显示在 status bar 的管理。


    image

    也就是说,大部分情况,我们用:

    NotificationManagerCompat.from(context).areNotificationsEnabled() 
    

    可适配除部分国产机以外的大部分机型。特殊机型暂时没办法,有小伙伴知道怎么搞的话求告知。

    如何跳转通知权限设置页?

    同样与 api 版本和机型有关。

    api 版本

    >=21:

    //21 以上,直接跳通知栏权限设置页
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
                intent.putExtra("app_package", context.getPackageName());
                intent.putExtra("app_uid", context.getApplicationInfo().uid);
            }
    

    9<=,<21:

    //* - 21,只能跳到 app 详情页
    else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD){
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                intent.setData(Uri.fromParts("package", context.getPackageName(), null));
            } 
    

    机型

    有些国产机是提供自己的权限管家软件管理通知权限的,对于这些机子,尽量跳转到权限对应的管家页面。
    部分 vivo:

     //  点击设置图标>加速白名单>我的app
            //      点击软件管理>软件管理权限>软件>我的app>信任该软件
            Intent appIntent = context.getPackageManager().getLaunchIntentForPackage("com.iqoo.secure");
            if(appIntent != null){
                Log.i("isPushEnable","start1");
                context.startActivity(appIntent);
                return;
            }
    

    部分 oppo:

    // oppo 点击设置图标>应用权限管理>按应用程序管理>我的app>我信任该应用
            //      点击权限隐私>自启动管理>我的app
            appIntent = context.getPackageManager().getLaunchIntentForPackage("com.oppo.safe");
            if(appIntent != null){
                Log.i("isPushEnable","start2");
                context.startActivity(appIntent);
                return;
            }
    

    部分 小米:

    xiaomi.png
    其他:
    其他跳转兼容.png

    判断是否开启通知(目前来说上线3个月没碰到啥问题):

    通知是否开启.png

    最后

    目前五大厂商手机覆盖较多(此方案覆盖80%机型!)

    相关文章

      网友评论

        本文标题:Android 通知检测以及跳转(系统适配)

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