android n 状态栏分析,Android N状态栏图标白底问题
问题背景
最近定制项目中,客户反馈自己的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状态栏图标白底问题相关推荐
- 解决Android高版本状态栏通知图标白底问题
最近临时转换角色修改Android系统源码,没有搞过一看源码一脸懵逼,代码太多了,关键是无法跟studio一样直接进行代码调转,折腾了一天才找到这个问题要修改的地方,其实就是Google为了规范统一和 ...
- android内存占用分析,Android App性能评测分析-内存篇
1.内存了解 在Android App的性能优化的各个部分里,内存方面的知识较多且不易理解,内存的问题绝对是最令人头疼的一部分,需要对内存基础知识.内存分配.内存管理机制等非常熟悉,才能排查问题. 1 ...
- Android实现mp3分析,Android编程实现播放MP3功能示例
本文实例讲述了Android编程实现播放MP3功能.分享给大家供大家参考,具体如下: 在android中播放mp3非常简单,也是项目中经常使用的,比如说要做项目的背景音乐,应用中某些功能的提示音等的. ...
- android qq登录分析,Android第三方登录之QQ登录
1. 在腾讯开放平台创建应用,申请Appkey qqdenglu.PNG 2. 下载sdk ,导入jar包 3.配置AndroidManifest android:name="com.ten ...
- android应用内存分析,Android应用程序内存分析-Memory Analysis for Android Applications
Android应用程序内存分析 原文链接:http://android-developers.blogspot.com/2011/03/memory-analysis-for-android.html ...
- android dropbox anr分析,Android如何分析排查ANR
释放双眼,带上耳机,听听看~! 在Android开发中,当程序发生异常时会抛出异常信息,先说下三种常见类型: 列表内容KeyDispatchTimeout(谷歌default 5s,MTK平台上是8s ...
- android tcpdump log分析,android 系统启动过程中加入tcpdump和logcat
一.android 系统启动过程中加入tcpdump ,分析开机启动后,系统与服务器端的消息交互. 1. init.rc 中的修改 1)在init.rc 中加上tcpdump service. ser ...
- OOM分析(1) Android 源,如何分析android的OOM,与java静态代码分析工具
用MAT分析OOM 很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause.根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例 ...
- android 亮屏分析,Android亮屏速度分析总结
前面聊的 最近在调试项目的亮屏速度,我们希望在按下power键后到亮屏这个时间能达到500MS以内,在Rockchip 3399和3288上面的时间都不能达到要求,因此引发了一系列的调试之路. 计算按 ...
最新文章
- CAP只能三选二,可以选CA吗?
- iOS Sprite Kit教程之场景的设置
- 5月26 留言板练习题
- 聚类(1)——混合高斯模型 Gaussian Mixture Model
- Spring Boot整合Spring Data Redis-存取Java对象
- 把windows键盘作为xfce环境中的打开Applications
- python中isinstance(3、object)_python中isinstance函数判断各种类型的小细节
- C++学习笔记—srand()和rand()
- Lua实现二进制串与Hex显示串的相互转换
- midi转简谱_音乐小技巧分享:五线谱转简谱与MIDI的快速方法
- Symbian S60 自动通话录音
- win10关闭windows聚焦_Windows聚焦功能无法使用怎么办_win10锁屏聚焦功能不更新教程 - 系统家园...
- php发卡v6_GitHub - Cghang/vfkphp: V发卡 完全开源免费的个人自动发卡解决方案
- 在VC6.0下设置Unicode编译环境
- GIt上传到远程库Gitee出现的问题,需要身份表明和私人邮箱的问题
- oracle rman crosscheck,rman的crosscheck命令
- 求解佩尔方程的基本解
- selenium定位到元素后获取其属性_selenium 元素查找与属性
- 基于Java毕业设计校园面包超市系统源码+系统+mysql+lw文档+部署软件
- HP LaserJet P1005打印机在windows10中驱动无法使用
热门文章
- Hybrid Dilated Convolution学习笔记
- “.”和“->”的区别
- 2023软件测试最难求职季,哪些测试技能更容易拿到offer?
- java qo_Java中DAO/DTO/PO/VO/BO/QO/POJO
- A1,A2,A3,A4纸的尺寸
- 二叉树--二叉平衡树
- AE/PR模板:10组电影质感海报宣传文字标题设计动画Cinematic Titles
- shell脚本——学习笔记(包含应用案例)
- 技术分享 | AlertManager 源码解析
- 网络运维工程师 ,需要掌握知识的总结。