先来一段发送普通通知的代码。

NotificationManager notificationManager = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(getActivity(),CHANNEL_ID)

.setSmallIcon(R.drawable.icon_notice)

.setContentTitle("标题")

.setContentText("内容内容内容,内容内容内容,内容内容内容")

.setAutoCancel(true)

.setSound(defaultSoundUri)

notificationManager.notify(notifiId, notificationBuilder.build());

我们来看看通知在各个版本上的表现(Genymotion模拟器)

Android 4.4状态栏

Android4.4通知栏

Android5.0状态栏

Android 5.0通知栏

Android6.0状态栏

Android 6.0通知栏

Android7.0状态栏

Android7.0通知栏

分析发现

Android 通知栏分成三个不同样式

Android 5.0以下版本

Android 5.0和6.0版本

Android 7.0以上版本

发现5.0以上版本的状态图标都变成了白块,通知栏也显示异常。

因为Android 5.0以上状态栏图标只能是白色图案,如果使用了有背景色的图片,那么会被直接填充为白色导致显示不出来。

解决方式

1、将 targetSdkVersion 修改到 21 以下,将不会这种问题。

2、分版本进行兼容

1.对于Android 5.0 以下的版本,直接可以使用原图标。

2.对于Android 5.0以上的版本。需要将通知图标修改为透明底的图片,且修改通知背景颜色。

icon_notice_temp.png

.setSmallIcon(R.drawable.icon_notice_temp)

.setColor(Color.RED)

得到的效果为

Android6.0上的效果

Android7.0上的效果

发现7.0以上通知的文字颜色也变了,这不好看,所以7.0以上判断不要设置背景颜色,得到效果就好看多了。

不加颜色

试了一下

setLargeIcon(BitmapFactory.decodeResource(mActivity.getResources(), R.drawable.icon_notice))

得到这样的效果

左下角出现了小图标,这并不是我想要的样子。

顺带提一下Android 8.0需要增加通知渠道,不然通知无法显示

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

@SuppressLint("WrongConstant")

NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);

channel.setDescription(description);

channel.setLightColor(Color.RED);

channel.enableVibration(true);

channel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});

notificationManager.createNotificationChannel(channel);

}

附上实现的关键代码

//增加一個渠道,ID不重复即可

String CHANNEL_ID = "159753";

String CHANNEL_NAME = "渠道名";

String description = "渠道说明";

int notifiId = (int) System.currentTimeMillis();

Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

NotificationManager notificationManager = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);

//Android 8.0需要增加渠道

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

@SuppressLint("WrongConstant")

NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);

channel.setDescription(description);

channel.setLightColor(Color.RED);

channel.enableVibration(true);

channel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});

notificationManager.createNotificationChannel(channel);

}

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(getActivity(),CHANNEL_ID);

if(Build.VERSION.SDK_INT

//如果是小于5.0系统的,设置原图

notificationBuilder.setSmallIcon(R.drawable.icon_notice);

}else{

//如果是大于等于5.0系统的,设置透明图

notificationBuilder.setSmallIcon(R.drawable.icon_notice_temp);

if(Build.VERSION.SDK_INT

//如果小于7.0系统,设置背景色

notificationBuilder.setColor(Color.RED);

}

}

notificationBuilder.setContentTitle("标题");

notificationBuilder.setContentText("内容内容内容,内容内容内容,内容内容内容");

notificationBuilder.setAutoCancel(true);

notificationBuilder.setSound(defaultSoundUri);

notificationBuilder.setContentIntent(null);

notificationManager.notify(notifiId, notificationBuilder.build());

注意:这只是原生系统上的实现效果,大部分厂商都会对通知进行适配修改,5.0以上只设置小图标大部分系统也是能显示原图的。试验过华为,小米,魅族,三星都是能正常显示原图小图标。

随便记录,仅供参考

android 在状态栏耳机图标显示图标显示图标显示图标,Android 通知栏图标相关推荐

  1. 怎么把android的状态栏改成蓝色,教程分享:如何实现Android沉浸式状态栏——教你让你的状态栏变个色!...

    一.概述 近期注意到QQ新版使用了沉浸式状态栏,ok,先声明一下:本篇博客效果下图: 关于这个状态栏变色到底叫「Immersive Mode」/「Translucent Bars」有兴趣可以去了解下. ...

  2. Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/51082574 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

  3. android 系统状态栏的隐藏和显示

    今天,简单讲讲android如何控制  系统状态栏的隐藏和显示. 昨天遇到这个问题,找了好久资料才解决,这里记录一下. 网上流传着很多种做法.比如: 1.在AndroidManifest.xml文 ...

  4. Android 10 状态栏通知图标和下拉状态栏图标为白色问题

    前言 安装第三方应用,会在状态栏上面和下拉状态栏通知图标显示白色 原因 因为google在android5.0上面做了限制,为了统一系统风格.之后的状态栏icon就不能够随便用一张色彩丰富的图片了,只 ...

  5. android n 状态栏分析,Android N状态栏图标白底问题

    问题背景 最近定制项目中,客户反馈自己的apk在收到通知时,状态栏图标全是白色底方框图片,不能正常显示用户代码里面加载的图片资源. 问题原因 这个是Android N对通知栏图标处理设计如此,处理逻辑 ...

  6. java显示位图_java – 大图标位图在通知中显示为白色方块?

    我有这个问题,我从我在通知中使用的URL生成位图.然而,在我的手机上,Bitmap显示为一个小白色的方块.我看着它,发现很多帖子像这样说: Icon not displaying in notific ...

  7. 应用启动图标未读消息数显示 工具类

    /* * 应用启动图标未读消息数显示 工具类 (效果如:QQ.微信.未读短信 等应用图标) * */ public class BadgeUtil { /** * Set badge count * ...

  8. Android动态控制状态栏显示和隐藏

    记得之前有朋友在留言里让我写一篇关于沉浸式状态栏的文章,正巧我确实有这个打算,那么本篇就给大家带来一次沉浸式状态栏的微技巧讲解. 其实说到沉浸式状态栏这个名字我也是感到很无奈,真不知道这种叫法是谁先发 ...

  9. Windows10——荣耀笔记本任务栏图标显示异常且无显示/隐藏图标的箭头解决方案

    截图只代表现象,上下文截图不出自同一处,例如:不同机子,参考文章,其他网络资源 问题机型 荣耀猎人V700 i5-10300H 问题描述 任务栏图标显示异常 当前活动程序图标不显示,但依然可以打开新程 ...

最新文章

  1. shell访问php文件夹,Shell获取某目录下所有文件夹的名称
  2. WP8.1学习系列(第五章)——中心控件Hub或透视控件Pivot交互UX
  3. 人工智能产品化的关键是基础架构和数据,而非算法
  4. 数据结构与算法--二叉树实现原理
  5. 95后人才吸引力城市排名发布,深圳位居全国第二
  6. zip安装mysql没有软件,windows10系统安装mysql-8.0.13(zip安装) 的教程详解
  7. mysql 字符串拼接 null_mysql字符串拼接并设置null值的实例方法
  8. C语言(New B语言)
  9. 【Elasticsearch源码】 GET分析
  10. con和com开头单词规律_com与con 前缀的单词
  11. ppt(office365)之表格使用说明
  12. HashData:守护数据安全 筑牢数字经济底座
  13. python爬取豆瓣Top250完整代码
  14. Houdini图文笔记:用Houdini实现随机自然倒角
  15. 分布式之Quorum NWR算法
  16. Unreal Engin_画廊制作笔记 _007Fog处理,雾的设置
  17. Xshell/Secure CRT/PuTTY使用密钥对登录阿里云Linux服务器
  18. 一点一点学Latex(section1)
  19. estimateGas gas required exceeds allowance (6989519) or always failing transaction
  20. vue项目 手机调试配置

热门文章

  1. 计算机购销存系统论文,企业进销存管理系统毕业论文.doc
  2. spring boot新闻管理系统毕业设计源码211113
  3. SPOJ GSS2 Can you answer these queries II
  4. 【系统集成项目管理】之信息系统集成(二)
  5. 这可能是最完整的进藏攻略
  6. Java工程师如何做好职业规划和成长路线?
  7. 关于使用CE(cheat engine)的扫雷详细逆向复现报告
  8. 宋丹丹晒年轻旧照 桃眼杏腮被赞美女
  9. twitter_如何找回旧的Twitter网站
  10. 一行代码解决IE浏览器的兼容问题