android Notification
发送通知可分为3步:
1、获取NotificationManager:
NotificationManager notificationManager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
2、创建Notification:
Intent intent=new Intent(this,SecActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); Notification notification = new NotificationCompat.Builder(this) .setContentTitle("title") .setTicker("ticker") .setContentText("message") .setContentIntent(contentIntent) .setSmallIcon(R.mipmap.ic_launcher) .build();
还可以使用setPriority方法来设置优先级:
根据重要程度从高到底依次为:MAX、HIGH、DEFAULT、LOW、MIN。
3、NotificationManager发送:
notificationManager.notify(1, notification1);
发送通知时的声音、振动和呼吸灯控制:
在不进行设置的情况下,没有任何提示效果,为了提醒用户,设置提示效果很有必要。
通常我们会使用系统默认的效果(使用的这种方法后,将会对其它的效果设置进行覆盖):
notification.defaults = Notification.DEFAULT_ALL;
我们也可以自定义设置提示效果:
1、声音提示:
(1)使用默认提示音:
notification.defaults |= Notification.DEFAULT_SOUND;
(2)自定义提示音:
notification.sound = Uri.parse("……/name.mp3");
2、
(1)使用默认振动效果:
notification.defaults |= Notification.DEFAULT_VIBRATE;
(2)自定义振动效果:
notification.vibrate=new long[]{0,200,800,200,800,200};
数组第1个为等待时间,第2个为振动时间,数组第3个为等待时间,第4个为振动时间……以此类推。
3、
(1)使用默认呼吸灯效果:
notification.defaults |= Notification.DEFAULT_LIGHTS;
(2)自定义呼吸灯效果:
notification.ledARGB = 0x00ff00; notification.ledOnMS = 300; notification.ledOffMS = 300; notification.flags |= Notification.FLAG_SHOW_LIGHTS;
上面三个分别设置呼吸灯颜色、明暗时间。
上文自定义呼吸灯使用了notification.flags进行设置,除此之外,
notification.flags还可以设置通知的许多特性,下面说说几个常用的:
1、FLAG_AUTO_CANCEL
点击通知后,这个通知就会自动取消掉。
2、FLAG_INSISTENT
通知音频将会不断重复播放,直到用户对这个通知作出响应。
3、FLAG_ONGOING_EVENT
这个标志可以将这个 notification 归类到“正在运行”下。这表示应用仍在运行—也就是说它的进程仍在后台运行。
4、FLAG_NO_CLEAR flag
用户点击清除通知键,通知不会被清除。
自定义通知UI:
系统默认的UI布局很多时候无法满足我们的需求,于是我们得自定义一个布局,这里需要用到RemoteViews:
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification); contentView.setImageViewResource(R.id.image, R.mipmap.ic_launcher); contentView.setTextViewText(R.id.title, "title"); contentView.setTextViewText(R.id.text, "text"); Intent intent = new Intent(this,SecActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); Notification notification = new NotificationCompat.Builder(this) .setContentIntent(contentIntent) .setContent(contentView) .setSmallIcon(R.mipmap.ic_launcher) .build(); notificationManager.notify(3, notification);
RemoteViews还可以用setOnClickPendingIntent方法实现点击事件
用setProgressBar方法更新通知栏的进度条状态……还有很多更新UI的方法,这些就不详细说明了。
PendingIntent:
PendingIntent与Intent类似,都是用于实现某种意图,PendingIntent可看做Intent的包装类。两者的差别是Intent的目的都是立即执行,PendingIntent则是延迟执行。
PendingIntent getActivity(Context context, int requestCode,Intent intent, @Flags int flags)
第四个参数有以下几种情况:
FLAG_ONE_SHOT 表示返回的PendingIntent仅能执行一次,执行完后自动取消
FLAG_NO_CREATE 表示如果描述的PendingIntent不存在,并不创建相应的PendingIntent,而是返回NULL
FLAG_CANCEL_CURRENT 表示相应的PendingIntent已经存在,则取消前者,然后创建新的PendingIntent, 这个有利于数据保持为最新的,可以用于即时通信的通信场景
FLAG_UPDATE_CURRENT 表示更新的PendingIntent