Android通知栏Notification的实现

在Android中经常会使用到通知机制中的通知栏框架(Notification),它适用于交互事件的通知。它位于顶层可以展开的通知列表,它会时不时地提醒你什么软件改更新了,什么人发你短信了,什么人发你QQ、微信信息等等。
Notification状态栏的功能作用

  • 显示接收到短消息,即时消息等信息(如QQ、微信、短信等)
  • 显示客户端的推送消息(如有软件可以更新、广告、推荐等)
  • 显示正在进行的事物(如后台运行的程序:音乐播放器、下载进度等)

Notification状态栏的基本布局
Notification支持文字内容显示、震动、三色灯、铃声等多种提示形式,在默认下Notification近显示消息标题、消息内容。送达时间这三项内容。通知的基本布局如下图所示:
Android通知栏Notification的实现_第1张图片
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);

使用步骤
流程模块:

  1. 创建一个通知栏的Builder构造类
  2. 定义通知栏的Action
  3. 设置通知栏点击事件
  4. 通知

代码实现片段如下:

// 从系统服务中获得通知管理器
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为确定
功能:设置带进度条的通知,可以在下载中使用

你可能感兴趣的:(Android)