在Android中经常会使用到通知机制中的通知栏框架(Notification),它适用于交互事件的通知。它位于顶层可以展开的通知列表,它会时不时地提醒你什么软件改更新了,什么人发你短信了,什么人发你QQ、微信信息等等。
Notification状态栏的功能作用
- 显示接收到短消息,即时消息等信息(如QQ、微信、短信等)
- 显示客户端的推送消息(如有软件可以更新、广告、推荐等)
- 显示正在进行的事物(如后台运行的程序:音乐播放器、下载进度等)
Notification状态栏的基本布局
Notification支持文字内容显示、震动、三色灯、铃声等多种提示形式,在默认下Notification近显示消息标题、消息内容。送达时间这三项内容。通知的基本布局如下图所示:
1. 标题 Title/Name
2. 大图标 Tcon/Photo
3. 内容文字
4. 内容消息 Message
5. 小图标 Secondary Icon
6. 通知的时间 Timestamp,默认是系统发出通知的时间,也可以通过setWhen()来设置
相关的类
状态通知栏主要涉及到两个类:Notification和NotificationManager
Notification为通知信息类,它里面对应了通知栏的各个属性
NotificationManager是状态通知栏的管理类,负责发通知、清除通知等操作。
注意:NotificationManager是一个系统Service,所以必须通过getSystemService(NOTIFICATION_SERVICE)方法来获取,主要的实现如下:
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
使用步骤
流程模块:
- 创建一个通知栏的Builder构造类
- 定义通知栏的Action
- 设置通知栏点击事件
- 通知
代码实现片段如下:
// 从系统服务中获得通知管理器
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
// 实例化通知栏构造器
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
// 对Builder进行配置
builder.setContentTitle("测试标题")
.setContentText("测试内容")
.setTicker("测试通知来啦")//通知首次出现在通知栏,带上升动画效果的
.setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示
.setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示
.setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消
.setOngoing(false)//ture,设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
.setDefaults(Notification.DEFAULT_VIBRATE)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合:Notification.DEFAULT_ALL Notification.DEFAULT_SOUND 添加声音
.setSmallIcon(R.drawable.ic_launcher);
// 点击的意图ACTION是跳转到Intent,点击事件
Intent intent = new Intent(this, SecondActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
// 构建通知
Notification notification = builder.build();
// 执行通知
notificationManager.notify(notifyId, notification)
接下来介绍一些方法的属性
(1) 方法:设置提醒标志符Flags
功能:提醒标志符,向通知添加声音、闪灯和振动效果等设置达到通知提醒效果,可以组合多个属性
有2种设置方法:
方法1:实例化通知栏之后通过给他添加.flags属性赋值。
Notification notification = builder.build();
notification.flags = Notification.FLAG_AUTO_CANCEL;
方法2:通过setContentIntent(PendingIntent intent)方法中的意图设置对应的flags
public PendingIntent getDefalutIntent(int flags){
PendingIntent pendingIntent= PendingIntent.getActivity(this, 1, new Intent(), flags);
return pendingIntent;
}
提醒标志符成员:
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 //表示正在运行的服务
(2) 方法:.setDefaults(int defaults) (NotificationCompat.Builder中的方法,用于提示)
功能:向通知添加声音、闪灯和振动效果的最简单、使用默认(defaults)属性,可以组合多个属性(和方法1中提示效果一样的)
对应属性:
Notification.DEFAULT_VIBRATE //添加默认震动提醒 需要 VIBRATE permission
Notification.DEFAULT_SOUND // 添加默认声音提醒
Notification.DEFAULT_LIGHTS // 添加默认三色灯提醒
Notification.DEFAULT_ALL // 添加默认以上3种全部提醒
(3) 方法:setVibrate(long[] pattern)
功能:设置震动方式。
.setVibrate(new long[] {0,300,500,700});
实现效果:延迟0ms,然后振动300ms,在延迟500ms,接着在振动700ms。
以上方法的还有种写法是
builder.build().vibrate = new long[] {0,300,500,700};
以此类推,2种写法都可以。
如果希望设置默认振动方式,设置了方法(2)中默认为DEFAULT_VIBRATE 即可。
(4) 方法:.setLights(intledARGB ,intledOnMS ,intledOffMS )
功能:android支持三色灯提醒,这个方法就是设置不同场景下的不同颜色的灯。
描述:其中ledARGB 表示灯光颜色、 ledOnMS 亮持续时间、ledOffMS 暗的时间。
注意:
1. 只有在设置了标志符Flags为Notification.FLAG_SHOW_LIGHTS的时候,才支持三色灯提醒。
2. 这边的颜色跟设备有关,不是所有的颜色都可以,要看具体设备。
使用:
.setLights(0xff0000ff, 300, 0)
同理,以下方法也可以设置同样效果:
Notification notify = mBuilder.build();
notify.flags = Notification.FLAG_SHOW_LIGHTS;
notify.ledARGB = 0xff0000ff;
notify.ledOnMS = 300;
notify.ledOffMS = 300;
如果希望使用默认的三色灯提醒,设置了方法(2)中默认为DEFAULT_LIGHTS即可。
(5)方法:.setSound(Uri sound)
功能:设置默认或则自定义的铃声,来提醒。
//获取默认铃声
.setDefaults(Notification.DEFAULT_SOUND)
//获取自定义铃声
.setSound(Uri.parse("file:///sdcard/xx/xx.mp3")) //获取Android多媒体库内的铃声
.setSound(Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "5"))
(6)方法:.setPriority(int pri)
优先级 | 用户 |
---|---|
MAX | 重要而紧急的通知,通知用户这个事件是时间上紧迫的或者需要立即处理的。 |
HIGH | 高优先级用于重要的通信内容,例如短消息或者聊天,这些都是对用户来说比较有兴趣的。 |
DEFAULT | 默认优先级用于没有特殊优先级分类的通知。 |
LOW | 低优先级可以通知用户但又不是很紧急的事件。 |
MIN | 用于后台消息 (例如天气或者位置信息)。最低优先级通知将只在状态栏显示图标,只有用户下拉通知抽屉才能看到内容。 |
对应属性(作用看上面表格就可知道):
Notification.PRIORITY_DEFAULT
Notification.PRIORITY_HIGH
Notification.PRIORITY_LOW
Notification.PRIORITY_MAX
Notification.PRIORITY_MIN
(7)方法:setOngoing(boolean ongoing)
功能:设置为ture,表示它为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
(8)方法:setProgress(int max, int progress,boolean indeterminate)
属性:max:进度条最大数值 、progress:当前进度、indeterminate:表示进度是否不确定,true为不确定,false为确定
功能:设置带进度条的通知,可以在下载中使用