android 通知之 notification
notifications | android developers
http://developer.android.com/guide/topics/ui/notifiers/notifications.html#notificationresponse
小图标,使用setsamllicon()方法设置。
标题,使用setcontenttitle()方法设置。
文本内容,使用setcontenttext()方法设置。
pendingintent提供了多个静态的getxxx()方法,用于获得适用于不同场景的pendingintent对象。一般需要传递的几个参数都很常规,只介绍一个flag参数,用于标识pendingintent的构造选择:
flag_cancel_current:如果构建的pendingintent已经存在,则取消前一个,重新构建一个。
flag_no_create:如果前一个pendingintent已经不存在了,将不再构建它。
flag_one_shot:表明这里构建的pendingintent只能使用一次。
flag_update_current:如果构建的pendingintent已经存在,则替换它,常用。
notification视觉风格
notification有两种视觉风格,一种是标准视图(normal view)、一种是大视图(big view)。标准视图在android中各版本是通用的,但是对于大视图而言,仅支持android4.1+的版本。
从官方文档了解到,一个标准视图显示的大小要保持在64dp高,宽度为屏幕标准。
标准视图的通知主体内容有一下几个:
1.通知标题。
2.大图标。
3.通知内容。
4.通知消息。
5.小图标。
6.通知的时间,一般为系统时间,也可以使用setwhen()设置。
而对于大视图(big view)而言,它的细节区域只能显示256dp高度的内容,并且只对android4.1+之后的设备才支持,它比标准视图不一样的地方,均需要使用setstyle()方法设定
setstyle()传递一个notificationcompat.style对象,它是一个抽象类,android为我们提供了三个实现类,用于显示不同的场景。分别是:
notificationcompat.bigpicturestyle, 在细节部分显示一个256dp高度的位图。
notificationcompat.bigtextstyle,在细节部分显示一个大的文本块。
notificationcompat.inboxstyle,在细节部分显示一段行文本。
notification.builder类中提供一个setprogress(int max,int progress,boolean indeterminate)方法用于设置进度条,max用于设定进度的最大数,progress用于设定当前的进度,indeterminate用于设定是否是一个确定进度的进度条。通过indeterminate的设置,可以实现两种不同样式的进度条,一种是有进度刻度的(true),一种是循环流动的(false)。
一种是有进度刻度的(false),一种是循环流动的(true)
builder.setprogress(0, 0, true);//设置为true,表示流动
builder.setprogress(100, 100, false);//设置为false,表示刻度
remoteviews contentviews = new remoteviews(getpackagename(),
r.layout.custom_notification);
contentviews.setimageviewresource(r.id.imageno, r.drawable.btm1);
contentviews.settexviewtext(r.id.titleno, "xxx");
contentviews.settexviewtext(r.id.textno, "xxx");
notificationcompat.builder.setcontent(remoteviews)
设定提示响应
对于有些通知,需要调用一些设备的资源,使用户能更快的发现有新通知,一般可设定的响应有:铃声、闪光灯、震动。对于这三个属性,notificationcompat.builder提供了三个方法设定:
可设定的响应有:铃声、闪光灯、震动
setsound(uri sound):设定一个铃声,用于在通知的时候响应。传递一个uri的参数,格式为“file:///mnt/sdcard/xxx.mp3”。
setlights(int argb, int onms, int offms):设定前置led灯的闪烁速率,持续毫秒数,停顿毫秒数。
setvibrate(long[] pattern):设定震动的模式,以一个long数组保存毫秒级间隔的震动。
大多数时候,我们并不需要设定一个特定的响应效果,只需要遵照用户设备上系统通知的效果即可,那么可以使用setdefaults(int)方法设定默认响应参数,在notification中,对它的参数使用常量定义了,我们只需使用即可:
default_all:铃声、闪光、震动均系统默认。
default_sound:系统默认铃声。
default_vibrate:系统默认震动。
default_lights:系统默认闪光。
而在android中,如果需要访问硬件设备的话,是需要对其进行授权的,所以需要在清单文件androidmanifest.xml中增加两个授权,分别授予访问振动器与闪光灯的权限:
1 <!-- 闪光灯权限 -->
2 <uses-permission android:name="android.permission.flashlight"/>
3 <!-- 振动器权限 -->
4 <uses-permission android:name="android.permission.vibrate"/>