问题背景

最近定制项目中,客户反馈自己的apk在收到通知时,状态栏图标全是白色底方框图片,不能正常显示用户代码里面加载的图片资源。

问题原因

这个是Android N对通知栏图标处理设计如此,处理逻辑如下:

首先判断APK的target version是Android L之后,如果是则直接会主动上色

如果在Android L之前则判断图片是否为Grayscale(灰度图),如果为灰度图的话也会有一个上色的操作.

涉及的代码有两块:

frameworks/base/core/java/android/app/Notification.java

/**

* Apply any necessariy colors to the small icon

*/

private void processSmallIconColor(Icon smallIcon, RemoteViews contentView) {

boolean colorable = !isLegacy() || getColorUtil().isGrayscaleIcon(mContext, smallIcon);

if (colorable) {

contentView.setDrawableParameters(R.id.icon, false, -1, resolveContrastColor(),

PorterDuff.Mode.SRC_ATOP, -1);

}

contentView.setInt(R.id.notification_header, "setOriginalIconColor",

colorable ? resolveContrastColor() : NotificationHeaderView.NO_COLOR);

}

colorable决定系统会不会主动上色,这块代码主要影响NotificationHeaderView的图标显示

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java

/**

* Applies {@link #mIconTint} to the notification icons.

*/

private void applyNotificationIconsTint() {

for (int i = 0; i < mNotificationIcons.getChildCount(); i++) {

StatusBarIconView v = (StatusBarIconView) mNotificationIcons.getChildAt(i);

boolean isPreL = Boolean.TRUE.equals(v.getTag(R.id.icon_is_pre_L));

boolean colorize = !isPreL || NotificationUtils.isGrayscale(v, mNotificationColorUtil);

if (false) {

v.setImageTintList(ColorStateList.valueOf(

StatusBarIconController.getTint(mTintArea, v, mIconTint)));

}

}

}

这块代码主要影响状态栏的图标,知道了这两处的位置就可以Android N进行客制化设置,比如小米会提取应用的Launcher Icon来做填充

android n 状态栏分析,Android N状态栏图标白底问题相关推荐

  1. 解决Android高版本状态栏通知图标白底问题

    最近临时转换角色修改Android系统源码,没有搞过一看源码一脸懵逼,代码太多了,关键是无法跟studio一样直接进行代码调转,折腾了一天才找到这个问题要修改的地方,其实就是Google为了规范统一和 ...

  2. android内存占用分析,Android App性能评测分析-内存篇

    1.内存了解 在Android App的性能优化的各个部分里,内存方面的知识较多且不易理解,内存的问题绝对是最令人头疼的一部分,需要对内存基础知识.内存分配.内存管理机制等非常熟悉,才能排查问题. 1 ...

  3. Android实现mp3分析,Android编程实现播放MP3功能示例

    本文实例讲述了Android编程实现播放MP3功能.分享给大家供大家参考,具体如下: 在android中播放mp3非常简单,也是项目中经常使用的,比如说要做项目的背景音乐,应用中某些功能的提示音等的. ...

  4. android qq登录分析,Android第三方登录之QQ登录

    1. 在腾讯开放平台创建应用,申请Appkey qqdenglu.PNG 2. 下载sdk ,导入jar包 3.配置AndroidManifest android:name="com.ten ...

  5. android应用内存分析,Android应用程序内存分析-Memory Analysis for Android Applications

    Android应用程序内存分析 原文链接:http://android-developers.blogspot.com/2011/03/memory-analysis-for-android.html ...

  6. android dropbox anr分析,Android如何分析排查ANR

    释放双眼,带上耳机,听听看~! 在Android开发中,当程序发生异常时会抛出异常信息,先说下三种常见类型: 列表内容KeyDispatchTimeout(谷歌default 5s,MTK平台上是8s ...

  7. android tcpdump log分析,android 系统启动过程中加入tcpdump和logcat

    一.android 系统启动过程中加入tcpdump ,分析开机启动后,系统与服务器端的消息交互. 1. init.rc 中的修改 1)在init.rc 中加上tcpdump service. ser ...

  8. OOM分析(1) Android 源,如何分析android的OOM,与java静态代码分析工具

    用MAT分析OOM 很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause.根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例 ...

  9. android 亮屏分析,Android亮屏速度分析总结

    前面聊的 最近在调试项目的亮屏速度,我们希望在按下power键后到亮屏这个时间能达到500MS以内,在Rockchip 3399和3288上面的时间都不能达到要求,因此引发了一系列的调试之路. 计算按 ...

最新文章

  1. CAP只能三选二,可以选CA吗?
  2. iOS Sprite Kit教程之场景的设置
  3. 5月26 留言板练习题
  4. 聚类(1)——混合高斯模型 Gaussian Mixture Model
  5. Spring Boot整合Spring Data Redis-存取Java对象
  6. 把windows键盘作为xfce环境中的打开Applications
  7. python中isinstance(3、object)_python中isinstance函数判断各种类型的小细节
  8. C++学习笔记—srand()和rand()
  9. Lua实现二进制串与Hex显示串的相互转换
  10. midi转简谱_音乐小技巧分享:五线谱转简谱与MIDI的快速方法
  11. Symbian S60 自动通话录音
  12. win10关闭windows聚焦_Windows聚焦功能无法使用怎么办_win10锁屏聚焦功能不更新教程 - 系统家园...
  13. php发卡v6_GitHub - Cghang/vfkphp: V发卡 完全开源免费的个人自动发卡解决方案
  14. 在VC6.0下设置Unicode编译环境
  15. GIt上传到远程库Gitee出现的问题,需要身份表明和私人邮箱的问题
  16. oracle rman crosscheck,rman的crosscheck命令
  17. 求解佩尔方程的基本解
  18. selenium定位到元素后获取其属性_selenium 元素查找与属性
  19. 基于Java毕业设计校园面包超市系统源码+系统+mysql+lw文档+部署软件
  20. HP LaserJet P1005打印机在windows10中驱动无法使用

热门文章

  1. Hybrid Dilated Convolution学习笔记
  2. “.”和“->”的区别
  3. 2023软件测试最难求职季,哪些测试技能更容易拿到offer?
  4. java qo_Java中DAO/DTO/PO/VO/BO/QO/POJO
  5. A1,A2,A3,A4纸的尺寸
  6. 二叉树--二叉平衡树
  7. AE/PR模板:10组电影质感海报宣传文字标题设计动画Cinematic Titles
  8. shell脚本——学习笔记(包含应用案例)
  9. 技术分享 | AlertManager 源码解析
  10. 网络运维工程师 ,需要掌握知识的总结。