最近一直在研究 android 的Notification 栏,Notification 对于大家应该不陌生,下面将 Notification 的使用总结如下:
概述
通过Activity和Service都可以创建一个Notification 实例, 一般情况下我们都是通过Services来创建一个Notification的,在本次实验中为了便于操作我们使用Activity来创建Notification,其创建过程是一样的,如果你要创建一个Notification,你需要使用如下两个类:
Activity:NotificationTestMain.java
layout: Main.xml
Layout:custom_notification_layout.xml
String: String.xml
Drawable:
关键代码分析
通过getSystemService得到系统服务NotificationManager。
创建Notification 实例,并制定Notification 在状态栏上的图标,提示文字和时间。
设置Notification的flags,此处主要有以下几个flags可选:
此处代码主要用于创建一个PendingIntent ,PendingIntent 是对Intent的包装,主要用于在用户点击Notification后的动作,此处我们为什么要使用PendingIntent 呢?大家都知道使用Intent可以启动Activity , Service 或发送Broadcast,当用户点击一个Notification后,由系统发出一条Intent,如果我们不告知此Intent用于启动什么的话,系统是不知道此Intent是用来启动Activity , Service 还是发送Broadcast。
在上述代码中我们先创建一个Intent对象,让后再用PendingIntent对其封装。
注意在创建Intent对象的时候一定要设置其Flags,其中Intent.FLAG_ACTIVITY_NEW_TASK 标记表示启动一个新的Activity,系统会检查当前所有已创建的Task中是否有该要启动的Activity的Task,若有,则在该Task上创建Activity,若没有则新建具有该Activity属性的Task,并在该新建的Task上创建Activity,而 Intent.FLAG_ACTIVITY_CLEAR_TOP 表示如果在当前Task中,有要启动的Activity,那么把该Acitivity之前的所有Activity都关掉,并把此Activity置前以避免创建Activity的实例,
更多关于Activity Task的信息可以参见: Tasks and Back Stack
做完上述操作后我们就可以使用setLatestEventInfo()设置Notification的信息,并用notify()更新Notification显示。
在设置Notification信息的时候我们可以使用系统默认的样式,通过调用setLatestEventInfo()进行设置。我们也可以使用自定义的样式,通过创建RemoteViews ,这样我们就可以定义Notification的样式了,比如我们可以在Notification中显示精度条等。注意RemoteViews 和setLatestEventInfo()不能同时使用的,如果同时使用,后使用的会覆盖前面使用。
这样我们就显示出了我们的通知栏了,当然通栏还可以进行更多的设置,比如我们可以设置有新通知是播放声音,震动等,要达到这种效果我们只需要为我们的Notification对象设置相应的属性
添加提示音:
添加提示音只需设置defaults属性为 Notification.DEFAULT_SOUND即可。然后添加播放的声音,声音可以来自
存储卡,也可以来自于媒体库,通过contentprovider获取。
如果我们想让声音重复播放可以设置
notification.flags |=
Notification.FLAG_INSISTENT;这样声音就会重复播放,知道用户点击通知后才停止。
添加震动:
和添加声音一样我们只需设置defaults属性为Notification.DEFAULT_VIBRATE即可,我们用一个long形的
数组来表示震动,第一个值表示开始震动的时间,第二个值表示第一次震动的时长,第三个值下一次震动的
时间以此类推,这个数组可以按照你需要进行设置,但是我们不能设置重复震动。
当然要达到震动效果我们需要相应的权限
添加屏幕闪烁:
同样我们只需设置defaults 为 Notification.DEFAULT_LIGHTS即可,ledARGB屏幕闪烁的颜色,ledOnMS 和ledOffMS 表示闪烁开始结束时间,最后我们添加flags为Notification.FLAG_SHOW_LIGHTS。
当然上述效果你也可同时使用,你可以设置即震动也播放声音。
概述
通过Activity和Service都可以创建一个Notification 实例, 一般情况下我们都是通过Services来创建一个Notification的,在本次实验中为了便于操作我们使用Activity来创建Notification,其创建过程是一样的,如果你要创建一个Notification,你需要使用如下两个类:
- Notification:用于定义Notification栏的一些基本属性,比如图标,通知文本信息和一些基本设置(是否可以被清除、提示音等)。
- NotificationManager:他是Android 的一个系统服务,用于管理我们的Notification。
Activity:NotificationTestMain.java
layout: Main.xml
Layout:custom_notification_layout.xml
String: String.xml
Drawable:
关键代码分析
通过getSystemService得到系统服务NotificationManager。
创建Notification 实例,并制定Notification 在状态栏上的图标,提示文字和时间。
设置Notification的flags,此处主要有以下几个flags可选:
- FLAG_AUTO_CANCEL:表示在点击Clear后可以清除Notification
- FLAG_ONGOING_EVENT:表示程序一直在运行,可以是前台也可以是后台
- FLAG_NO_CLEAR:表示Notification信息不能被清除掉
此处代码主要用于创建一个PendingIntent ,PendingIntent 是对Intent的包装,主要用于在用户点击Notification后的动作,此处我们为什么要使用PendingIntent 呢?大家都知道使用Intent可以启动Activity , Service 或发送Broadcast,当用户点击一个Notification后,由系统发出一条Intent,如果我们不告知此Intent用于启动什么的话,系统是不知道此Intent是用来启动Activity , Service 还是发送Broadcast。
在上述代码中我们先创建一个Intent对象,让后再用PendingIntent对其封装。
注意在创建Intent对象的时候一定要设置其Flags,其中Intent.FLAG_ACTIVITY_NEW_TASK 标记表示启动一个新的Activity,系统会检查当前所有已创建的Task中是否有该要启动的Activity的Task,若有,则在该Task上创建Activity,若没有则新建具有该Activity属性的Task,并在该新建的Task上创建Activity,而 Intent.FLAG_ACTIVITY_CLEAR_TOP 表示如果在当前Task中,有要启动的Activity,那么把该Acitivity之前的所有Activity都关掉,并把此Activity置前以避免创建Activity的实例,
更多关于Activity Task的信息可以参见: Tasks and Back Stack
做完上述操作后我们就可以使用setLatestEventInfo()设置Notification的信息,并用notify()更新Notification显示。
在设置Notification信息的时候我们可以使用系统默认的样式,通过调用setLatestEventInfo()进行设置。我们也可以使用自定义的样式,通过创建RemoteViews ,这样我们就可以定义Notification的样式了,比如我们可以在Notification中显示精度条等。注意RemoteViews 和setLatestEventInfo()不能同时使用的,如果同时使用,后使用的会覆盖前面使用。
这样我们就显示出了我们的通知栏了,当然通栏还可以进行更多的设置,比如我们可以设置有新通知是播放声音,震动等,要达到这种效果我们只需要为我们的Notification对象设置相应的属性
添加提示音:
添加提示音只需设置defaults属性为 Notification.DEFAULT_SOUND即可。然后添加播放的声音,声音可以来自
存储卡,也可以来自于媒体库,通过contentprovider获取。
如果我们想让声音重复播放可以设置
notification.flags |=
Notification.FLAG_INSISTENT;这样声音就会重复播放,知道用户点击通知后才停止。
添加震动:
和添加声音一样我们只需设置defaults属性为Notification.DEFAULT_VIBRATE即可,我们用一个long形的
数组来表示震动,第一个值表示开始震动的时间,第二个值表示第一次震动的时长,第三个值下一次震动的
时间以此类推,这个数组可以按照你需要进行设置,但是我们不能设置重复震动。
当然要达到震动效果我们需要相应的权限
添加屏幕闪烁:
同样我们只需设置defaults 为 Notification.DEFAULT_LIGHTS即可,ledARGB屏幕闪烁的颜色,ledOnMS 和ledOffMS 表示闪烁开始结束时间,最后我们添加flags为Notification.FLAG_SHOW_LIGHTS。
当然上述效果你也可同时使用,你可以设置即震动也播放声音。