加载中
Dean_King 2017/04/18 18:14 发布了新博客:
多谢各位 ,我采用了nohup,每次要关闭时,用kill
@Dean_King
可执行的jar文件,是一个服务器程序,如果使用java -jar xxx 方式运行,命令行会一直被占用,打印log...
Dean_King 2015/08/19 16:18 回答了问题: android notification 小图标的问题

找到答案了

http://www.cnblogs.com/avenwu/p/4180193.html

目前在Android中通知的使用还是很常见的,为了做版本兼容,常用兼容包NotificationCompat.Builder和 Notification.Builder。

  • NotificationCompat.Builder位于v4扩展包内(version 4 Support Library)
  • Notification.Builder在Android 3.0 开始引入(API level 11).

最近在Android5.0设备上发现一个问题:通知图标突然变成了白色的方块而不是代码中设置的icon。

问题原因

细读开发者文档其实也可以发现一些线索,虽然笔者是直接查的源码发现的问题原因。http://developer.android.com/design/patterns/notifications.html 一文的Use distinct icons部分介绍了几点关于通知的建议,其中的有两点是建议开发者不要做的行为。

Don't
Place any additional alpha (dimming or fading) into your small icons and action icons; they can have anti-aliased edges, but because Android uses these icons as masks (that is, only the alpha channel is used), the image should generally be drawn at full opacity.

Don't
Use color to distinguish your app from others. Notification icons should only be a white-on-transparent background image.

简单的说就是5.0后Android官方建议不要为通知的图标添加任何额外的透明度,渐变色,不要企图用颜色将通知图标与其他应用,比如系统应用,应用的通知图标只能是在透明的背景上有白色的图案。
至于原因,文档并没有细说,只是提到5.0系统将会在底层处理图标,想知怎么处理的可以参考Android SDK API level 21后的Notificaiton源码,里面写的较详细。
Project Structure
Project Structure

结合文档提供的图片示例,应该可以理解。
如果不遵循建议那么有很大几率是会出上文提到问题的,为什么不是别然出问题呢?
这还依赖于代码编译的版本,根据尝试,目前api 21以后编译会出问题,20及以前的版本编译不会出问题。所以解决问题比较简单粗暴的方案是用20及更早的版本编译代码。但是要测底解决问题,还是得遵循文档指导,及从新设计通知的图标以符合要求。

源码分析

下面看一下到底21的Android源码里面做了什么操作会导致通知的图标统统变白色。
Notification.java

private RemoteViews applyStandardTemplate(int resId, boolean hasProgress) { //... if (mLargeIcon != null) {
         contentView.setImageViewBitmap(R.id.icon, mLargeIcon);
         processLargeLegacyIcon(mLargeIcon, contentView);
         contentView.setImageViewResource(R.id.right_icon, mSmallIcon);
         contentView.setViewVisibility(R.id.right_icon, View.VISIBLE);
         processSmallRightIcon(mSmallIcon, contentView);
     } else { // small icon at left contentView.setImageViewResource(R.id.icon, mSmallIcon);
         contentView.setViewVisibility(R.id.icon, View.VISIBLE);
         processSmallIconAsLarge(mSmallIcon, contentView);
    } //... }
/**
         * Recolor small icons when used in the R.id.right_icon slot.
         */ private void processSmallRightIcon(int smallIconDrawableId, RemoteViews contentView) { if (!isLegacy() || mColorUtil.isGrayscaleIcon(mContext, smallIconDrawableId)) {
                contentView.setDrawableParameters(R.id.right_icon, false, -1, 0xFFFFFFFF,
                        PorterDuff.Mode.SRC_ATOP, -1);

                contentView.setInt(R.id.right_icon, "setBackgroundResource",
                        R.drawable.notification_icon_legacy_bg);

                contentView.setDrawableParameters(
                        R.id.right_icon, true,
                        -1,
                        resolveColor(),
                        PorterDuff.Mode.SRC_ATOP,
                        -1);
            }
        }

这里我截取了两段比较关键的代码,在用NotificationCompat.Builder实例化我们的通知后,最终需要将各种图标,参数配置,应用到通知视图上面。可以看到如果我们只设置smallIcon而不设置largeIcon也是可以的,此时直接将small作为大图标设置给左侧的id为R.id.icon的ImageView。要注意的事一般情况下都不可以不设置smallIcon,否则通知无法正常显示出来。
processSmallIconAsLarge方法里面负责将我们设置的smallIcon二次处理,也就是这里会改变我们最终看到的通知图标,包括顶部状态栏和下拉显示的小图标。

参考

  1. http://developer.android.com/design/patterns/notifications.html
  2. http://developer.android.com/guide/topics/ui/notifiers/notifications.html
作者: 小文字
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

@Dean_King
notification 小图标(红线画的)是怎么设置进去的,我设置smallicon,在4.X的系统上是显示这个...
Dean_King 2015/08/12 10:25 评论了动弹:
你贴出来,我只要照片
@___白
寻人启事
Dean_King 2015/08/04 08:50 评论了动弹:
没有之一7
@piaoxuedtian
php是世界上最好的语言
KServer 2015/07/17 10:00 评论了代码:一句话拿到客户端IP
对啊,我要说的也是 $_SERVER["REMOTE_ADDR"] 获取客户端IP,正常情况下可以用,但做了NAT后这个地址是变化的,会在一个区间里变化,比如我在家里用程序每5秒请求一次ip.php,每次都不一样,在一个B类地址中变化。
@Dean_King
一句话拿到客户端IP
KServer 2015/07/16 09:52 评论了代码:一句话拿到客户端IP
是的,我之前写过,网址还在 http://deanlib.com/lab/ipcollecter/ip.php 代码: $ip = $_SERVER["REMOTE_ADDR"]; echo "Current IP:".$ip."
";
@Dean_King
一句话拿到客户端IP
KServer 2015/07/15 09:52 评论了代码:一句话拿到客户端IP
不用什么稀有,我住的那边服务商做了NAT,这个方法卵用没有
@Dean_King
一句话拿到客户端IP
Dean_King 2015/06/24 09:49 评论了动弹:
应该买一本OC和一本swift
@ouStrawberry
找不到IOS开发于是自学IOS了。
Dean_King 2015/06/19 16:55 评论了动弹:
IP地址: 115.159.93.205上海市 腾讯集团
@uknow8692
请大家访问我的服务器:http://115.159.93.205:8080/
Dean_King 2015/04/03 17:41 发布了新博客:
Cosven 2015/04/03 10:09 评论了代码:网易云音乐 Linux 更新 - 2015-4-4
支持开源,支持Linux,支持楼主
@Dean_King
网易云音乐 Linux 更新 - 2015-4-4

没有更多内容

加载失败,请刷新页面

返回顶部
顶部