最近使用Notification为应用显示后台推送消息,在开发过程当中遇到一些问题。从新整理之前写过的代码发如今Support包中NotificationCompat类,是为新旧版本的android系统作的兼容库。原来的通知消息在高版本android系统上会出现奇怪的问题。以后我用新版NotificationCompat从新写消息通知栏。解决完问题以后我从新整理了一下资料,熟悉新版通知的使用,文章内容浅显。另外奉上Google官方关于通知的API Guides上面都有详细的使用方法。
因为新版通知有不少内容是服务于高版本Android系统,因此有些通知类型会在一些低版本系统中不能实现相应的效果,其次因为国内手机厂商对系统从新定制致使一些通知样式也不能到达预期效果。这些问题须要在开发中引发注意,避免影响到app的用户体验,因此作好设备兼容性是最主要的问题。html
文章的Demo地址android
Notification采用builder设计模式,通知栏的参数配置在builder中完成,再由builder来build通知实例Notification,最后NotificationManager显示通知消息。建立通知必须包含git
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!"); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(mId, mBuilder.build());
Method | Introduction |
---|---|
setSmallIcon | 设置通知小图标(必须设置项) |
setLargeIcon | 设置通知大图标 |
setContentTitle | 设置通知标题(必须设置项) |
setContentText | 设置通知内容(必须设置项) |
setDefaults | 消息提醒模式 (声音/震动/提示灯...) |
setSound | 设置自定义消息提醒音 |
setVibrate | 设置震动频率 |
setLights | 设置提示灯显示 |
setOngoing | 设置通知是否能够在通知列表清楚 |
setOnlyAlertOnce | 通知若是已经存在再也不提醒 |
setAutoCancel | 消息点击以后是否还在通知栏中显示 |
setProgress | 设置进度,在通知栏上显示进度样式 |
setContent | 用于设置自定义通知 |
setContentIntent | 设置通知点击跳转的内容 |
须要注意的是扩展布局通知只支持Android 4.1 及更高版本的系统,另外在一些国产机定制rom中可能不支持扩展布局通知,因此在使用扩展布局的须要慎重考虑。github
BigPictureStyle支持显示大图的通知,下面是几个能够设置的参数,通知图片显示经过bigPicture设置bitmap设计模式
setBigContentTitleapp
setSummaryTextide
bigLargeIcon布局
bigPicture测试
NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle(); bigPictureStyle.setBigContentTitle("Title"); bigPictureStyle.setSummaryText("SummaryText"); Bitmap bigPicture = BitmapFactory.decodeResource(getResources(),R.drawable.android); bigPictureStyle.bigPicture(bigPicture); builder.setStyle(bigPictureStyle);
显示文本通知,能够显示更多文本内容。感受和inboxStyle差很少。ui
setBigContentTitle
setSummaryText
bigText
NotificationCompat.BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle(); bigTextStyle.setBigContentTitle("Title"); bigTextStyle.bigText("BigText\nBigText\nBigText\nBigText\nBigText"); bigTextStyle.setSummaryText("SummaryText"); builder.setStyle(bigTextStyle);
消息通知,可快速回复message的通知。好像在Android N以上才能使用。目前手上的测试机是低版本的,没有快速回复的操做项。
addMessage
setConversationTitle
NotificationCompat.MessagingStyle messagingStyle = new NotificationCompat.MessagingStyle("UserName"); messagingStyle.addMessage("message",System.currentTimeMillis(),"JulyYu"); messagingStyle.setConversationTitle("Messgae Title"); builder.setStyle(messagingStyle);
能够显示多行文本的通知,经过addline并能增长新的一行文本内容。
setBigContentTitle
setSummaryText
addLine
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); String[] events = new String[]{"1","2","3","4"}; inboxStyle.setBigContentTitle("Event tracker details:"); inboxStyle.setSummaryText("SummaryText"); for (int i=0; i < events.length; i++) { inboxStyle.addLine(events[i]); } builder.setStyle(inboxStyle);
多媒体播放通知,快捷的多媒体操做控件。能够自定义须要显示的操做控件内容。
setShowActionsInCompactView
setMediaSession
setShowCancelButton
setCancelButtonIntent
builder.addAction(android.R.drawable.ic_media_rew,"",null); builder.addAction(android.R.drawable.ic_media_play,"",null); builder.addAction(android.R.drawable.ic_media_ff,"",null); NotificationCompat.MediaStyle mediaStyle = new NotificationCompat.MediaStyle(); mediaStyle.setShowActionsInCompactView(0,1,2); mediaStyle.setShowCancelButton(true); builder.setStyle(mediaStyle);