通知栏框架

在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等。

下面就来说说经常会使用到通知机制中的通知栏框架(Notificaiton),它适用于交互事件的通知。它是位于顶层可以展开的通知列表。它会时不时的提醒你什么软件该更新了,什么人发你微信消息了等。

(网上看了下,全面介绍的文章不多,所以就萌生了写这篇的念头,随便当作回顾笔记。下面我就通过官方文档、源代码、书上的一些资料汇总下这一块的知识,并通过一个通知栏的汇总DEMO让大家更好的了解这个类的使用,内容有点多,可以根据需求看目录学习)。

Notificaiton状态通知栏:

功能作用

1.显示接收到短消息、即使消息等信息 (如QQ、微信、新浪、短信)  
2.显示客户端的推送消息(如有新版本发布,广告,推荐新闻等) 
3.显示正在进行的事物(例如:后台运行的程序)(如音乐播放器、版本更新时候的下载进度等)

思维导图结构

思维导图的大体结构(按照各个节点延伸拓展学习)

Notificaiton -- service   -- BroadcastReceiver  -- Intent(flag、Action等属性应用) --  PendingIntent

感慨:

一个Notificaiton通知的拓展使用就要涉及与4大组建的配合,所以学好整体的知识体系。

联系:

1.由于service 是在后台运行,所以它意图做什么我们看不到,可以通过Notificaiton 来显示提醒(如音乐的后台播放)。

2.service服务和BroadcastReceiver广播相结合,在加上Notificaiton 显示(如程序的后台更新)。

3.Intent作为意图处理,和Notificaiton的点击时间紧密结合在了一起,并且与BroadcastReceiver和service的联系也紧密不可以分割。

(service 在后台之后通过BroadcastReceiver来通知Notificaiton 显示相关东西,在通过Intent完成用户的意图操作)

 

元素:

1. 标题   Title/Name

2. 大图标  Icon/Photo

3. 内容文字   

4. 内容信息   MESSAGE

5. 小图标 Secondary Icon

6. 通知的时间 Timestamp,默认为系统发出通知的时间,也可通过setWhen()来设置

相关分析

状态通知栏主要涉及到2个类:  Notification 和 NotificationManager 

Notification为通知信息类,它里面对应了通知栏的各个属性

NotificationManager : 是状态栏通知的管理类,负责发通知、清除通知等操作。

注意:NotificationManager是一个系统Service,所以必须通过 getSystemService(NOTIFICATION_SERVICE)方法来获取,方法如下。

NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

使用步骤:

流程模块:

第一步:

创建一个通知栏的Builder构造类  (Create a Notification Builder)

 

第二步:

定义通知栏的Action  (Define the Notification's Action)

第三步:

设置通知栏点击事件    (Set the Notification's Click Behavior)

第四步:

通知   (Issue the Notification)

代码模块:

实现系统默认的通知栏效果:

第一步:获取状态通知栏管理:

NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

第二步:实例化通知栏构造器NotificationCompat.Builder:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);

第三步:对Builder进行配置:

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 添加声音 // requires VIBRATE permission

.setSmallIcon(R.drawable.ic_launcher);//设置通知小ICON

对应的各个方法的属性(部分方法以上代码中已经作注释,就不再介绍):

(1)方法:设置提醒标志符Flags

功能提醒标志符,向通知添加声音、闪灯和振动效果等设置达到通知提醒效果,可以组合多个属性法:

1.实例化通知

有2种设置方栏之后通过给他添加.flags属性赋值。

Notification notification = mBuilder.build();

notification.flags = Notification.FLAG_AUTO_CANCEL;

2.通过setContentIntent(PendingIntentintent)方法中的意图设置对应的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.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。

以上方法的还有种写法是

mBuilder.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(Urisound)
功能:设置默认或则自定义的铃声,来提醒。

//获取默认铃声.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

用于后台消息 (例如天气或者位置信息)。最低优先级通知将只在状态栏显示图标,只有用户下拉通知抽屉才能看到内容。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值