通知栏Notification在不同手机上显示的问题总结
2017-01-16 15:28
274 查看
可以参照http://blog.csdn.net/vipzjyno1/article/details/25248021,这里面关于通知的写的不错,也很全面,我的这篇主要是记录自己在适配上遇到的问题。
通知的统一的创建方式:
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mContext);
而通知的管理则是使用NotificationManager是用来管理通知的,使用如下:先初始化用到的系统服务,然后调用notify(int notifyId,Notification notification)使用
NotificationManager mNotificationManager = (NotificationManager) mContext.getSystemService(mContext.NOTIFICATION_SERVICE);
mNotificationManager.notify(105, mBuilder.build());
接下来描述一下builder中的使用问题:(以下使用机型ZTE-U807(刷机DUI桌面),三星A5,坚果手机进行测试)
1、手机上不设置setSmallIcon就不会显示通知,但是三星和中兴手机会有通知振动的提示
mBuilder.setSmallIcon(R.drawable.notify_icon).setLargeIcon(bigIcon);
2、不同手机上设置setSmallIcon位置显示不一致
![](/e/u261/themes/default/images/spacer.gif)
![](https://s1.51cto.com/wyfs02/M01/8C/E2/wKiom1h8dr7TBDcdAAAHA5aN-O4332.png)
(1)两者都设置mBuilder.setSmallIcon(R.drawable.notify_icon).setLargeIcon(bigIcon);
坚果手机显示:ticker通知显示的是小图标SmallIcon ,A区域显示应用图标,E区域显示的是小图标SmallIcon
三星手机显示:ticker通知显示的是小图标,A区域显示的是大图标,E区域显示的是小图标。
中兴手机显示:ticker通知显示的是小图标(centerCrop),A区域显示的是大图标,E区域显示的是小图标(但是很大,图标占的区域过大,适配不行)
(2)只设置mBuilder.setSmallIcon(R.drawable.notify_icon)
坚果手机显示:ticker通知显示的是小图标SmallIcon ,A区域显示应用图标,E区域不显示。
三星手机显示:ticker通知显示的是小图标,A区域显示的是小图标,E区域不显示。
中兴手机显示:ticker通知显示的是小图标(centerCrop),A区域显示的是小图标,E区域不显示。
3、自定义通知(注意里面的内容最好不要超过两行,记得省略)
显示结果分析如下:
坚果手机显示:ticker通知显示的是小图标SmallIcon ,D区域显示的是应用图标,紫色区域是应用名称,点击下拉箭头收起或展开新通知。下面区域是自定义布局区域。
![](/e/u261/themes/default/images/spacer.gif)
![](https://s2.51cto.com/wyfs02/M01/8C/DE/wKioL1h8dtbjWidkAAAaU17131w734.png)
三星手机显示:ticker通知显示的是小图标,A区域显示的是自定义图标,不管设置不设置大图标都不显示大图标。
![](/e/u261/themes/default/images/spacer.gif)
![](https://s2.51cto.com/wyfs02/M02/8C/E2/wKiom1h8dunTYC-_AAAFn6RX2sE717.png)
中兴手机显示:ticker通知显示的是小图标(centerCrop),A区域显示的是大图标,B区域显示的是自定义图标。(如果不设置大图标,则没有A区域的显示,只有自定义布局的显示,C区域一般两行就可以了,涉及到适配问题)
![](/e/u261/themes/default/images/spacer.gif)
![](https://s2.51cto.com/wyfs02/M02/8C/DE/wKioL1h8dvvBOFogAAAG9XZIoC8315.png)
4、点击通知栏,通过receiver处理跳转后的事情(在manifest文件中注册时一定要加上export=true的属性,不然大部分手机都无法收到onreceive)
在传值的时候,setContentIntent(PendingIntent intent)这个方法,PendingIntent可以设置执行次数,主要用于远程服务通信、闹铃、通知、启动器、短信中。
Notification支持多种Intent来响应单击事件、消除事件、处理紧急状态的全屏事件等,setContentIntent(PendingIntent intent)来处理以上这么多的事件。
PendingIntent的位标识符:
FLAG_ONE_SHOT表示返回的PendingIntent仅能执行一次,执行完后自动取消
FLAG_NO_CREATE表示如果描述的PendingIntent不存在,并不创建相应的PendingIntent,而是返回NULL
FLAG_CANCEL_CURRENT表示相应的PendingIntent已经存在,则取消前者,然后创建新的PendingIntent,这个有利于数据保持为最新的,可以用于即时通信的通信场景
FLAG_UPDATE_CURRENT表示更新的PendingIntent
具体的PendingIntent的使用,可以参照 http://blog.csdn.net/vipzjyno1/article/details/25248021,这里面关于通知的写的不错,也很全面,我的这篇主要是记录自己在适配上遇到的问题。
备注:点击通知栏,通过receiver处理跳转后的事情,发广播和接收广播这里我们就不做详细描述了
通知的统一的创建方式:
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mContext);
而通知的管理则是使用NotificationManager是用来管理通知的,使用如下:先初始化用到的系统服务,然后调用notify(int notifyId,Notification notification)使用
NotificationManager mNotificationManager = (NotificationManager) mContext.getSystemService(mContext.NOTIFICATION_SERVICE);
mNotificationManager.notify(105, mBuilder.build());
接下来描述一下builder中的使用问题:(以下使用机型ZTE-U807(刷机DUI桌面),三星A5,坚果手机进行测试)
1、手机上不设置setSmallIcon就不会显示通知,但是三星和中兴手机会有通知振动的提示
mBuilder.setSmallIcon(R.drawable.notify_icon).setLargeIcon(bigIcon);
2、不同手机上设置setSmallIcon位置显示不一致
![](/e/u261/themes/default/images/spacer.gif)
![](https://s1.51cto.com/wyfs02/M01/8C/E2/wKiom1h8dr7TBDcdAAAHA5aN-O4332.png)
(1)两者都设置mBuilder.setSmallIcon(R.drawable.notify_icon).setLargeIcon(bigIcon);
坚果手机显示:ticker通知显示的是小图标SmallIcon ,A区域显示应用图标,E区域显示的是小图标SmallIcon
三星手机显示:ticker通知显示的是小图标,A区域显示的是大图标,E区域显示的是小图标。
中兴手机显示:ticker通知显示的是小图标(centerCrop),A区域显示的是大图标,E区域显示的是小图标(但是很大,图标占的区域过大,适配不行)
(2)只设置mBuilder.setSmallIcon(R.drawable.notify_icon)
坚果手机显示:ticker通知显示的是小图标SmallIcon ,A区域显示应用图标,E区域不显示。
三星手机显示:ticker通知显示的是小图标,A区域显示的是小图标,E区域不显示。
中兴手机显示:ticker通知显示的是小图标(centerCrop),A区域显示的是小图标,E区域不显示。
3、自定义通知(注意里面的内容最好不要超过两行,记得省略)
/** * 自定义视图通知 */ public void showNotifyConfirm(String title,String content,String ticker) { // 先设定RemoteViews RemoteViews viewCustom = new RemoteViews(mContext.getPackageName(),R.layout.view_custom); // 设置对应IMAGEVIEW的ID的资源图片 viewCustom.setImageViewResource(R.id.custom_icon, R.drawable.icon); // view_custom.setInt(R.id.custom_icon,"setBackgroundResource",R.drawable.icon); viewCustom.setTextViewText(R.id.tv_custom_title, title); viewCustom.setTextViewText(R.id.tv_custom_content,content); viewCustom.setTextViewText(R.id.tv_custom_time,refFormatNowDate()); // 设置时间显示 viewCustom.setViewVisibility(R.id.tv_custom_time, View.GONE); NotificationCompat.Builder mBuilder = new Builder(mContext); mBuilder.setAutoCancel(true) .setTicker(ticker) .setSmallIcon(R.drawable.btn_prev)//小图标 .setContent(viewCustom) //.setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL)) .setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示 .setPriority(Notification.PRIORITY_DEFAULT)//设置该通知优先级 .setOngoing(false);//不是正在进行的 ,true为正在进行 效果和.flag一样; mNotificationManager.notify(105, mBuilder.build()); }
显示结果分析如下:
坚果手机显示:ticker通知显示的是小图标SmallIcon ,D区域显示的是应用图标,紫色区域是应用名称,点击下拉箭头收起或展开新通知。下面区域是自定义布局区域。
![](/e/u261/themes/default/images/spacer.gif)
![](https://s2.51cto.com/wyfs02/M01/8C/DE/wKioL1h8dtbjWidkAAAaU17131w734.png)
三星手机显示:ticker通知显示的是小图标,A区域显示的是自定义图标,不管设置不设置大图标都不显示大图标。
![](/e/u261/themes/default/images/spacer.gif)
![](https://s2.51cto.com/wyfs02/M02/8C/E2/wKiom1h8dunTYC-_AAAFn6RX2sE717.png)
中兴手机显示:ticker通知显示的是小图标(centerCrop),A区域显示的是大图标,B区域显示的是自定义图标。(如果不设置大图标,则没有A区域的显示,只有自定义布局的显示,C区域一般两行就可以了,涉及到适配问题)
![](/e/u261/themes/default/images/spacer.gif)
![](https://s2.51cto.com/wyfs02/M02/8C/DE/wKioL1h8dvvBOFogAAAG9XZIoC8315.png)
4、点击通知栏,通过receiver处理跳转后的事情(在manifest文件中注册时一定要加上export=true的属性,不然大部分手机都无法收到onreceive)
/** * 显示通知栏点击跳转在receiver中处理 **/ public void showIntentReceiverNotify(String title,String content,String ticker,String pid) { NotificationCompat.Builder mBuilder = initNotify(); mBuilder.setAutoCancel(true) .setContentTitle(title) .setContentText(content) .setTicker(ticker); Intent clickIntent = new Intent(mContext, ClickNotifyReceiver.class); clickIntent.setAction("com.qihoo.gamecenter.pluginapk.ClickNotifyReceiver.click"); clickIntent.putExtra("pushId", pid); PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(pendingIntent); mNotificationManager.cancel(110); mNotificationManager.notify(110, mBuilder.build()); }
在传值的时候,setContentIntent(PendingIntent intent)这个方法,PendingIntent可以设置执行次数,主要用于远程服务通信、闹铃、通知、启动器、短信中。
Notification支持多种Intent来响应单击事件、消除事件、处理紧急状态的全屏事件等,setContentIntent(PendingIntent intent)来处理以上这么多的事件。
PendingIntent的位标识符:
FLAG_ONE_SHOT表示返回的PendingIntent仅能执行一次,执行完后自动取消
FLAG_NO_CREATE表示如果描述的PendingIntent不存在,并不创建相应的PendingIntent,而是返回NULL
FLAG_CANCEL_CURRENT表示相应的PendingIntent已经存在,则取消前者,然后创建新的PendingIntent,这个有利于数据保持为最新的,可以用于即时通信的通信场景
FLAG_UPDATE_CURRENT表示更新的PendingIntent
具体的PendingIntent的使用,可以参照 http://blog.csdn.net/vipzjyno1/article/details/25248021,这里面关于通知的写的不错,也很全面,我的这篇主要是记录自己在适配上遇到的问题。
备注:点击通知栏,通过receiver处理跳转后的事情,发广播和接收广播这里我们就不做详细描述了
相关文章推荐
- IOS-48-解决开发中自定义控件在不同型号手机上不能显示的问题 (区别在于iOS修改了weak、strong属性)
- 解决Picasso占用内存,使用Picasso在加载超过2M左右的图片时完全不能显示图片问题(不同的手机可能不同)
- 预约页面在红米手机上显示异常的问题解决总结
- 解决Notification不显示的问题:图标不设置,通知也不会显示
- 关于OpenGL ES20显示YUV数据在不同手机要使用不同坐标系的问题,求教各位大虾
- Android开发:notification通知以及通知不显示的问题
- 关于华为手机,通知栏信息不显示问题!
- 关于Android Notification.Builder不显示通知的问题
- 不同版本Notification的显示问题(最简单的方法是把目标版本更改为4.4)
- 音乐播放时在通知栏显示大小不同的 notification
- 关于struts2,mysql,hibernate的开发环境下的中文显示为“问号”的问题总结
- 转载:VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- action中的list在JSP页面如何显示问题的总结
- 关于struts2,mysql,hibernate的开发环境下的中文显示为“问号”的问题总结
- ImageList图片透明显示问题,XP下,16位色显示属性和32色显示属性显示不同。
- Nokia手机短信发件人显示乱码问题解决
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- Datagrid数据绑定后,根据不同条件判断显示问题
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- WINCE应用层设计经验总结-关于程序启动LOGO显示问题