1. 通知的基本用法
通知的创建
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(context).build();
上述只是创建了一个空的 Notification 对象,并没有什么实际作用。
创建一个丰富的 Notification 对象
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("This is content title") // 定义标题
.setContentText("This is content text") // 定义正文内容
.setWhen(System.currentTimeMillis()) // 定义通知时间
.setSmallIcon(R.mipmap.ic_launcher) // 定义小图标
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) // 定义大图标
.build();
// 第一个参数为通知的 id, 每个通知的 id 都是不同的
manager.notify(1, notification);
如果想让通知可以被点击,我们需要使用 PendingIntent,可以简单理解为延迟的 Intent。
PendingIntent 提供了几个静态方法获取 PendingIntent 实例。
// 第二个参数一般用不到,通常传 0
// 第三个参数是一个 Intent 对象, 我们通过这个对象构建出 PendingIntent 的意图
// 第四个参数用于确定 PendingIntent 的行为,一般传 0
PendingIntent.getActivity(Context, int, Intent, int); // 跳转到一个activity组件
PendingIntent.getBroadcast(Context, int, Intent, int); // 打开一个广播组件
PendingIntent.getService(Context, int, Intent, int); // 打开一个服务组件
我们写一个可以点击的通知
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.send_notice:
Intent intent = new Intent(this, NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("This is content title")
.setContentText("This is content text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.setContentIntent(pi)
.build();
manager.notify(1, notification);
break;
default:
break;
}
}
点击通知以后并没有消失,让通知消失有两种方法
// 方法一
Notification notification = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.build();
// 方法二, 在新的 Activity 中
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.cancel(id);
2. 通知的进阶技巧
Notification notification = new NotificationCompat.Builder(this)
// 指定音频文件
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
// 设置手机震动,参数为一个数组 手机静止的时长,震动的时长,静止的时长,以此类推
.setVibrate(new long[]{0, 1000, 1000, 1000})
// 设置 led 灯,参数为 颜色,灯亮的时长,灯暗的时长
.setLights(Color.GREEN, 1000, 1000)
// 使用通知的默认效果
.setDefaults(NotificationCompat.DEFAULT_ALL)
// 构建出富文本的通知内容,让通知中不仅有文字和图标,还有更加丰富的东西
.setStyle(new NotificationCompat.BigTextStyle().bigText("Learn how to build notifications, send and sync data, and use voice actions. Get the official Android IDE and developer tools to build apps for Android."))
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.big_image)))
// 用于设置通知的重要程度
// PRIORITY_DEFAULT 默认,PRIORITY_MIN 最小,PRIORITY_LOW 较低,PRIORITY_HIGH 重要,PRIORITY_MAX 最高,必须让用户立即看到,甚至做出响应
.setPriority(NotificationCompat.PRIORITY_MAX)
.build();