当运用程序不在前台运转,这时便借助关照( Notification )向用户发送少许提醒消息。 发出关照后,手机非常上方的状况栏中就会表现一个关照图标,下拉状况栏就会看到关照的细目。

1 根基用法

//获取体系关照服无
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
String contentTitle = "重庆现非常修长电梯"; //题目
String contentText = "宽度仅包容一人爆红网页";//内容
Notification notification = new NotificationCompat.Builder(context).setContentTitle(contentTitle)
.setContentText(contentText).setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)).build();

*应用 NotificationCompat 可以包管关照功效能够在当前所有的 Android 版本中都适合。

*NotificationCompat 的 Builder 支持应用连缀的配置要领,这一点很像 jQuery。

Builder 配置要领:

要领名申明

setContentTitle(CharSequence title)配置题目。

setContentText(CharSequence text)配置内容。

setWhen(long when)配置建立关照的光阴,单元是毫秒。

setSmallIcon(int icon)配置关照的小图标,会表现在手机的左上角。

setLargeIcon(Bitmap icon)配置关照的大图标,下拉体系的状况栏时,便看到它啦。

notify(int id, Notification notification) 要领用于表现关照,它有两个参数:id 是我们运用中为关照定义的唯一标识符;notification 就是我们确立的关照工具。

运转后:

关照小图标

下拉体系状况栏,即可看到我们新建的关照消息:

这时的关照消息尚未实现点击结果,我们可以通过 PendingIntent 来实现。它与 Intent 的差别之处是:

Intent - 登时执行某个动作。

PendingIntent - 在某个合适的机遇去执行某个动作。

我们新建一个活动,当用户点击关照消息后,会跳转到这个活动中。

结构文件:

android:id="@+id/activity_notification"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="26sp"
android:text="在重庆自由碑自满世界左近,有一部迷你电梯,因其非常局促惹起了宽泛的关注,对于这部魔性的电梯,有网友表示“这是对胖子的深深歹意······”"

这个活动很简单,只是展现少许文本内容。

接着,点窜以前的活动代码:

//获取体系关照服无
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//建立 PendingIntent
int requestCode = 0;
int flags = PendingIntent.FLAG_UPDATE_CURRENT;
Intent intent = new Intent(context, NotificationActivity.class);//启动 NotificationActivity 活动
PendingIntent pendingIntent = PendingIntent.getActivity(context, requestCode, intent, flags);
//建立关照
String contentTitle = "重庆现非常修长电梯"; //题目
String contentText = "宽度仅包容一人爆红网页";//内容
Notification notification = new NotificationCompat.Builder(context).setContentTitle(contentTitle)
.setContentText(contentText).setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)).setContentIntent(pendingIntent).setAutoCancel(true).build();
manager.notify(1, notification);

这里建立 PendingIntent 工具,并把它放入 NotificationCompat.Builder 中。

PendingIntent.getActivity 定义如下:
public static PendingIntent getActivity(Context context, int requestCode,
Intent intent, @Flags int flags)

参数形貌

Context高低文,在 Activity 类中就是本身(this)。

requestCode要求码。

intentIntent 工具。

flags举动体例。

flags 举动体例范例:

范例形貌

FLAG_ONE_SHOTPendingIntent 工具只能被应用一次。

FLAG_NO_CREATE要是 PendingIntent 工具不存在,则回笼 null。

FLAG_CANCEL_CURRENT即便以前的 PendingIntent 工具曾经存在,也会建立一个新的 PendingIntent 工具。

FLAG_UPDATE_CURRENT要是以前的 PendingIntent 工具曾经存在,辣么会更新它的内容。(常用)

留意:我们构建 Build 的过程当中加入了 setAutoCancel(true),则表示当用户点击了关照后,手机左上角的图标就不会再表现啦。也能够应用 NotificationManager 的 cancel 要领主动作废,这可以运用于某些分外场景:

int notifyId = 1;//关照 ID
manager.notify(notifyId, notification);
//耽误 5 s,要不关照一会儿就会被作废啦
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
manager.cancel(notifyId);

运转程序,再次点击体系关照栏中的关照,这时将会弹出关照活动页:

2 高级功效

2.1 自定义关照音

翻开 Android Device Monitor,可以看到在 "/system/media/audio/notifications/ 下自带了良多关照音,我们可以选定乃至是自定义一个喜好的关照音:

体系自带的关照音

//自定义关照音
Uri customSound = Uri.fromFile(new File("/system/media/audio/notifications/Altair.ogg"));

可以通过以下体例获得体系的关照音:

Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
1

非常后应用 setSound 要领来配置关照音:

public Builder setSound(Uri sound)

1

是不是很简单呀O(∩_∩)O哈哈~

2.2 关照振动

通过配置 vibrate 属性,可以让关照出现时让手机振动,它定义如下:

public Builder setVibrate(long[] pattern)
1

pattern 是长整型数组,它被用来配置手机稳定和振动的时长,以毫秒为单元。它是一种交替的配置形式,好比下标 0 表示稳定的时长,下标 1 表示振动的时长,下标 2 又表示振动的时长,以此类推。

Notification notification = new NotificationCompat.Builder(context)
...
.setVibrate(new long[]{0,1000,1000,1000}).build();
1
2
3
接着,在 AndroidManifest.xml 中申明振动权限:
1

如许,当用户收到关照时,手机就会振动啦 O(∩_∩)O哈哈~

2.3 呼吸灯

呼吸灯是指灯光在微电脑的掌握之下实现由亮到暗的渐渐变更,感受好像是人在呼吸,它起到一个关照提醒的感化。

通过配置 setLights ,可以掌握呼吸灯的变更频率,它定义如下:

public Builder setLights(@ColorInt int argb, int onMs, int offMs)

1

参数申明

argb灯的色彩,通过 Color 类来配置。

onMs灯亮的时长,单元:毫秒。

offMs灯灭的时长,单元:毫秒。

//自定义色彩-紫色
int color=Color.rgb(255,0,255);
Notification notification = new NotificationCompat.Builder(context).setContentTitle(contentTitle)
...
.setLights(color,1000,1000).build();
富文本

NotificationCompat.Builder 类中的 setStyle() 要领,可以让我们构建出富文本的关照内容, 这个要领汲取一个 NotificationCompat.style 参数,通过它用来建立出详细的富文本信息,如长文字 、 图片等 。

2.4.1 长文本

要是 setContentText() 传入的内容过长,辣么一行内表现不完的内容就会变为不祥号:

//长文字

String longContentText = " 即日,重庆现非常修长电梯走红网页,毕竟怎么样环境呢?在重庆自由碑自满世界左近,有一部显得十分“修长”的迷你电梯,经测量,宽度约57.5厘米,只能容下一个人乘坐,一般而言,一般的电梯可以站两个人,但这部迷你电梯相对局促,于是有很多旅客特地来打卡摄影。";//内容

android.support.v4.app.NotificationCompat.BigTextStyle bigTextStyle=new NotificationCompat.BigTextStyle().bigText(longContentText);
Notification notification = new NotificationCompat.Builder(context).setContentTitle(contentTitle)
...
.setStyle(bigTextStyle).build();

长文本表现结果

2.4.2 图片

图片表现结果

2.5 优先级

NotificationCompat.Builder 类中的 setPriority() 要领可用于配置关照的紧张程度,它汲取一个整型参数,在 NotificationCompat 中定义了 5 级优先级常量值:

可用的优先级参数

int priority=NotificationCompat.PRIORITY_MAX;
Notification notification = new NotificationCompat.Builder(context).setContentTitle(contentTitle)
...
.setPriority(priority)
.build();


要是配置为非常高优先级,辣么它会干脆表现在屏幕顶部:

非常高优先级结果

确保这个关照对于用户来说确实是至关紧张的,否则要是用户发生了反感,辣么有可能会卸载掉这个 APP 哦。