全面解析Notification.docx
- 文档编号:4904312
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:22
- 大小:131.44KB
全面解析Notification.docx
《全面解析Notification.docx》由会员分享,可在线阅读,更多相关《全面解析Notification.docx(22页珍藏版)》请在冰豆网上搜索。
全面解析Notification
全面解析Notification
Notification的使用步骤
1.获取NotificationManager
NotificationManagermNotificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
2.创建NotificationCompat.Builder
NotificationCompat.BuildermBuilder=newNotificationCompat.Builder(this);
3.对Builder设置一些Notification相关属性:
mBuilder.setContentTitle("标题")//设置通知栏标题
.setContentText("内容")//设置通知栏显示内容
.setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL))//设置通知栏点击意图
//.setNumber(number)//设置通知集合的数量
.setTicker("通知到来")//通知首次出现在通知栏,带上升动画效果的
.setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示,一般是系统获取到的时间
.setPriority(Notification.PRIORITY_DEFAULT)//设置该通知优先级
//.setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消
.setOngoing(false)//ture,设置他为一个正在进行的通知。
他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
.setDefaults(Notification.DEFAULT_VIBRATE)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合
//Notification.DEFAULT_ALLNotification.DEFAULT_SOUND添加声音//requiresVIBRATEpermission
.setSmallIcon(R.drawable.ic_launcher);//设置通知小ICON
4.使用Builder创建通知
Notificationnotification=mBuilder.build();
5.使用NotificationManager将通知推送出去
intid=199;
LogUtils.d(TAG,"创建通知");
mNotificationManager.notify(id,notification);
Notification重要方法解析
Notification的基本操作主要有创建、更新、取消这三种。
一个Notification的必要属性有三项,如果不设置则在运行时会抛出异常:
小图标,通过setSmallIcon()方法设置
标题,通过setContentTitle()方法设置
内容,通过setContentText()方法设置
除了以上三项,其它均为可选项。
虽然如此,但还是应该给Notification设置一个Action,这样就可以直接跳转到App的某个Activity、启动一个Service或者发送一个Broadcast。
否则,Notification仅仅只能起到通知的效果,而不能与用户交互。
当系统接收到通知时,可以通过震动、响铃、呼吸灯等多种方式进行提醒。
1)setSmallIcon()与setLargeIcon()
在NotificationCompat.Builder中有设置通知的大小图标的两个方法。
这两个方法有什么区别呢?
当setSmallIcon()与setLargeIcon()同时存在时,smallIcon显示在largeIcon的右下角;当只设置setSmallIcon()时,smallIcon显示在左侧。
看下图你就明白了。
对于部分ROM,可能修改过源码,如MIUI上通知的大图标和小图标是没有区别的。
Google官方是这么解释setSmallIcon()这个方法的:
Setthesmalliconresource,whichwillbeusedtorepresentthenotificationinthestatusbar.Theplatformtemplatefortheexpandedviewwilldrawthisiconintheleft,unlessalargeiconhasalsobeenspecified,inwhichcasethesmalliconwillbemovedtotheright-handside.
2)设置提醒标志符Flags
方法解释:
提醒标志符,向通知添加声音、闪灯和振动效果等设置达到通知提醒效果,可以组合多个属性
a)创建通知栏之后通过给他添加.flags属性赋值。
1.Notificationnotification=mBuilder.build();
2.notification.flags=Notification.FLAG_AUTO_CANCEL;
1
2
3
1
2
3
b)通过setContentIntent(PendingIntentintent)方法中的意图设置对应的flags
1
1
1.publicPendingIntentgetDefalutIntent(intflags){
2.PendingIntentpendingIntent=PendingIntent.getActivity(this,1,newIntent(),flags);
3.returnpendingIntent;
4.}
各标志符介绍
Notification.FLAG_SHOW_LIGHTS//三色灯提醒,在使用三色灯提醒时候必须加该标志符
Notification.FLAG_ONGOING_EVENT//发起正在运行事件(活动中)
Notification.FLAG_INSISTENT//让声音、振动无限循环,直到用户响应(取消或者打开)
Notification.FLAG_ONLY_ALERT_ONCE//发起Notification后,铃声和震动均只执行一次
Notification.FLAG_AUTO_CANCEL//用户单击通知后自动消失
Notification.FLAG_NO_CLEAR//只有全部清除时,Notification才会清除,不清楚该通知(QQ的通知无法清除,就是用的这个)
Notification.FLAG_FOREGROUND_SERVICE//表示正在运行的服务
3).setDefaults(intdefaults)(NotificationCompat.Builder中的方法,用于设置通知到来时,通过什么方式进行提示)
方法解释:
向通知添加声音、闪灯和振动效果的最简单、使用默认(defaults)属性,可以组合多个属性(和方法1中提示效果一样的)
对应属性:
Notification.DEFAULT_VIBRATE//添加默认震动提醒需要VIBRATEpermission
Notification.DEFAULT_SOUND//添加默认声音提醒
Notification.DEFAULT_LIGHTS//添加默认三色灯提醒
Notification.DEFAULT_ALL//添加默认以上3种全部提醒
/**
*显示带有默认铃声、震动、呼吸灯效果的通知
*如需实现自定义效果,请参考后面三个例子
*/
privatevoidshowNotifyWithMixed(){
NotificationCompat.Builderbuilder=newNotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("我是有铃声+震动+呼吸灯效果的通知")
.setContentText("库里就是叼~")
//等价于setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE);
.setDefaults(Notification.DEFAULT_ALL);
mManager.notify(5,builder.build());
}
4)setVibrate(long[]pattern)
方法解释:
设置震动的时间
.setVibrate(newlong[]{0,300,500,700});
实现效果:
延迟0ms,然后振动300ms,在延迟500ms,接着在振动700ms。
还有另外一种写法:
mBuilder.build().vibrate=newlong[]{0,300,500,700};
如果希望设置默认振动方式,设置了方法
(2)中默认为DEFAULT_VIBRATE即可。
例子:
/**
*展示有震动效果的通知,需要在AndroidManifest.xml中申请震动权限
* name="android.permission.VIBRATE"/> *补充: 测试震动的时候,手机的模式一定要调成铃声+震动模式,否则你是感受不到震动的 */ privatevoidshowNotifyWithVibrate(){ //震动也有两种设置方法,与设置铃声一样,在此不再赘述 long[]vibrate=newlong[]{0,500,1000,1500}; NotificationCompat.Builderbuilder=newNotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle("我是伴有震动效果的通知") .setContentText("颤抖吧,凡人~") //使用系统默认的震动参数,会与自定义的冲突 //.setDefaults(Notification.DEFAULT_VIBRATE) //自定义震动效果 .setVibrate(vibrate); //另一种设置震动的方法 //Notificationnotify=builder.build(); //调用系统默认震动 //notify.defaults=Notification.DEFAULT_VIBRATE; //调用自己设置的震动 //notify.vibrate=vibrate; //mManager.notify(3,notify); mManager.notify(3,builder.build()); } 4)方法: .setLights(intledARGB,intledOnMS,intledOffMS) 方法解释: android支持三色灯提醒,这个方法就是设置不同场景下的不同颜色的灯。 描述: 其中ledARGB表示灯光颜色、ledOnMS亮持续时间、ledOffMS暗的时间。 注意: 1)只有在设置了标志符Flags为Notification.FLAG_SHOW_LIGHTS的时候,才支持三色灯提醒。 2)这边的颜色跟设备有关,不是所有的颜色都可以,要看具体设备。 Notificationnotify=mBuilder.build(); notify.setLights(0xff00eeff,500,200) 同理,以下方法也可以设置同样效果: Notificationnotify=mBuilder.build(); notify.flags=Notification.FLAG_SHOW_LIGHTS; notify.ledARGB=0xff00eeff; notify.ledOnMS=500; notify.ledOffMS=400; 如果希望使用默认的三色灯提醒,设置了方法 (2)中默认为DEFAULT_LIGHTS即可。 例子: /** *显示带有呼吸灯效果的通知,但是不知道为什么,自己这里测试没成功 */ privatevoidshowNotifyWithLights(){ finalNotificationCompat.Builderbuilder=newNotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle("我是带有呼吸灯效果的通知") .setContentText("一闪一闪亮晶晶~") //ledARGB表示灯光颜色、ledOnMS亮持续时间、ledOffMS暗的时间 .setLights(0xFF0000,3000,3000); Notificationnotify=builder.build(); //只有在设置了标志符Flags为Notification.FLAG_SHOW_LIGHTS的时候,才支持呼吸灯提醒。 notify.flags=Notification.FLAG_SHOW_LIGHTS; //设置lights参数的另一种方式 //notify.ledARGB=0xFF0000; //notify.ledOnMS=500; //notify.ledOffMS=5000; //使用handler延迟发送通知,因为连接usb时,呼吸灯一直会亮着 Handlerhandler=newHandler(); handler.postDelayed(newRunnable(){ @Override publicvoidrun(){ mManager.notify(4,builder.build()); } },10000); } 5)方法: .setSound(Urisound) 方法解释: 设置默认或则自定义的铃声,来提醒。 //获取默认铃声 .setDefaults(Notification.DEFAULT_SOUND) //获取自定义铃声 .setSound(Uri.parse("file: ///sdcard/dance.mp3")) //获取Android多媒体库内的铃声 .setSound(Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI,"5")) 同理相同效果的另一种设置方法这边就不讲,和上面的都是一样的。 例子: /** *展示有自定义铃声效果的通知 *补充: 使用系统自带的铃声效果: Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI,"6"); */ privatevoidshowNotifyWithRing(){ NotificationCompat.Builderbuilder=newNotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle("我是伴有铃声效果的通知") .setContentText("美妙么? 安静听~") //调用系统默认响铃,设置此属性后setSound()会无效 //.setDefaults(Notification.DEFAULT_SOUND) //调用系统多媒体裤内的铃声 //.setSound(Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"2")); //调用自己提供的铃声,位于/res/values/raw目录下 .setSound(Uri.parse("android.resource: //com.littlejie.notification/"+R.raw.sound)); //另一种设置铃声的方法 //Notificationnotify=builder.build(); //调用系统默认铃声 //notify.defaults=Notification.DEFAULT_SOUND; //调用自己提供的铃声 //notify.sound=Uri.parse("android.resource: //com.littlejie.notification/"+R.raw.sound); //调用系统自带的铃声 //notify.sound=Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"2"); //mManager.notify(2,notify); mManager.notify(2,builder.build()); } 6)方法: .setPriority(intpri) 方法解释: 设置优先级(实际项目中并无大用,设置最高级也不会使得你的通知栏出现在第一位) 这里写图片描述 对应属性: Notification.PRIORITY_DEFAULT(优先级为0) Notification.PRIORITY_HIGH Notification.PRIORITY_LOW Notification.PRIORITY_MAX(优先级为2) Notification.PRIORITY_MIN(优先级为-2) Notification.PRIORITY_MAX是优先级最高,Notification.PRIORITY_MIN优先级最低 7)方法: setOngoing(booleanongoing) 方法解释: 设置为ture,表示它为一个正在进行的通知。 他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接) PS: 我们看到360手机卫士的通知栏一直固定在手机中,就是通过设置这个标记,使用该标记后你的通知栏无法被用户手动进行删除,只能通过代码进行删除,慎用 8)setProgress(intmax,intprogress,booleanindeterminate) 属性: max: 进度条最大数值、progress: 当前进度、indeterminate: 表示进度是否不确定,true为不确定,false为确定 功能: 设置带进度条的通知,可以在下载中使用 注意: 此方法在4.0及以后版本才有用,如果为早期版本: 需要自定义通知布局,其中包含ProgressBar视图 使用: 如果为确定的进度条: 调用setProgress(max,progress,false)来设置通知,在更新进度的时候在此发起通知更新progress,并且在下载完成后要移除进度条,通过调用setProgress(0,0,false)既可。 如果为不确定(持续活动)的进度条,这是在处理进度无法准确获知时显示活动正在持续,所以调用setProgress(0,0,true),操作结束时,调用setProgress(0,0,false)并更新通知以移除指示条 9)如何更新Notification 更新通知很简单,只需要再次发送相同ID的通知即可,如果之前的通知还未被取消,则会直接更新该通知相关的属性;如果之前的通知已经被取消,则会重新创建一个新通知。 更新通知跟发送通知使用相同的方式。 privatevoidrefreshNotification(){ //获取NotificationManager实例 NotificationManagernotifyManager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); //实例化NotificationCompat.Builde并设置相关属性 NotificationCompat.Builderbuilder=newNotificationCompat.Builder(this) //设置小图标 .setSmallIcon(R.mipmap.icon_fab_repair) //设置通知标题 .setContentTitle("最简单的Notification") //设置通知内容 .setContentText("只有小图标、标题、内容") //设置通知时间,默认为系统发出通知的时间,通常不用设置 //.setWhen(System.currentTimeMillis()); //通过builder.build()方法生成Notification对象,并发送通知,id=1 notifyManager.notify(1,builder.build()); } 10)如何取消Notification? 取消通知有如下5种方式: 1.点击通知栏的清除按钮,会清除所有可清除的通知 2.设置了setAutoCancel()或FLAG_AUTO_CANCEL的通知,点击该通知时会清除它 3.通过NotificationManager调用cancel(intid)方法清除指定ID的通知 4.通过NotificationManager调用cancel(Stringtag,intid)方法清除指定TAG和ID的通知 5.通过NotificationManager调用cancelAll()方法清除所有该应用之前发送的通知 如果你是通过NotificationManager.notify(Stringtag,intid,Notificationnotify)方法创建的通知,那么只能通过NotificationManager.cancel(Stringtag,intid)方法才能清除对应的通知,调用NotificationManager.cancel(intid)无效。 例子: publicclassDemoActiv
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全面 解析 Notification