继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Android开发笔记——小米通知‘坑’ app的通知一直显示在不重要通知里 ...

波斯汪
关注TA
已关注
手记 364
粉丝 66
获赞 428

Android8.0之后,通知引入渠道的概念,谷歌初衷应该是让用户能够自己管理通知级别以提高用户体验。

不过在小米这,我遇到了一个坑,在其他8.0的手机,渠道设置等级后,能够正常显示通知,代码如下:

private void createNotificationChannel(NotificationManager notificationManager) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
        return;
    }
    NotificationChannel channel = new NotificationChannel(XXX_ID, "XXX_Name",
            NotificationManager.IMPORTANCE_HIGH);
    channel.enableLights(true);
    notificationManager.createNotificationChannel(channel);

}

以上在渠道初始化时,参数NotificationManager.IMPORTANCE_HIGH表示该渠道的通知是重要通知(当然我有试过NotificationManager.IMPORTANCE_MAX,不过AS会提示错误,意思是HIGH是最高等级了,你设置成MAX也能运行,不过没用)

不过在小米这里,通知一直显示在不重要通知里面,导致通知没有提示,在华为8.0正常。我进入小米的通知管理页面,发现通知"是否设置为重要"为"系统推荐",我手动改为"设为重要",这是通知正常了。但是一想到用户用我的App还要手动设置,体验太差。以下代码解决问题:

private NotificationCompat.Builder getChannelNotification(String subject, String message, PendingIntent intent) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
        return null;
    }
    return new NotificationCompat.Builder(context, XXX_ID).setLargeIcon(BitmapFactory.decodeResource(context.getResources
            (), R.mipmap.ic_launcher)).setSmallIcon(R.mipmap.icon_notification_small).setContentIntent(intent).setContentTitle(subject).setContentText(message)
            .setAutoCancel(true).setShowWhen(true).setVisibility(Notification.VISIBILITY_PUBLIC).setPriority(NotificationCompat.PRIORITY_HIGH);
}

我觉得我这里应该是个低级错误,导致网上如何也找不到答案,解决关键是 setPriority(NotificationCompat.PRIORITY_HIGH)。不止渠道需要设置等级,生成通知的代码中也要设置。另外如果不设置这个等级,可以用Notification类替代NotificationCompat,原来我用的就是Notification,才有后来这个坑。这里做个记录,纪念我浪费的两三个小时和无数个脑细胞。

原文链接:http://www.apkbus.com/blog-184446-78099.html

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP

热门评论

没卵用。你的代码,在9.6小米中还是被系统搞到不重要通知了并且没声音了

无知,从小米系统9开始就加入了通知过滤,你设置这些鬼东西都没有用

查看全部评论