天天看点

Android 通知之 Notification

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"/>