1.PendingIntent和Intent类似,都可以指明某个“意图”,启动活动,启动服务,发送广播等。
不同之处:Intent倾向于立即执行某个动作,而PendingIntent倾向于在某个合适的时机去执行某个动作。可以这样理解,
PendingIntent—>延迟执行的Intent。
2.PendingIntent的用法:提供了几个静态方法获取实例,根据需求来选择使用getActivity(),getBroadcast()还是getService()。
这几个方法接收参数相同,第一个依旧是Context;第二个一般用不到,传入0;第三个是一个Intent对象,通过这个对象构建出
PendingIntent的“意图”;第四个确定PendingIntent的行为,有FLAG_ONE_SHOT,FLAG_NO_CREATE,
FLAG_CANCEL_CURRENT 和 FLAG_UPDATE_CURRENT。
3.通知加上点击功能后的代码全貌:
Intent intent = new Intent(this, NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
Notification.Builder builder = new Notification.Builder(MainActivity.this);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setTicker("This is ticker text");
builder.setWhen(System.currentTimeMillis());
builder.setAutoCancel(false);
builder.setContentTitle("This is content title");
builder.setContentText("This is content text");
builder.setContentIntent(pi);
Notification n = builder.build();
manager.notify(1,n);
4.sound属性:在通知发出时播放一段音频,更好地告知用户有通知到来,其是Uri对象,指定音频文件时需要先获取到音频文件
对应的URI。eg.手机的/system/media/audio/ringtones目录下有一个Basic_tone.ogg音频文件,代码指定:(本书用例废弃,现版已改动,未解决)
Uri soundUri = Uri.fromFile(new File("/system/media/audio/ringtones/Basic_tone.ogg"));
notification.sound = sounder;
vibrate属性:在通知到来时让手机振动,以毫秒为单位。(本书用例废弃,现版已改动,解决)
eg.代码如下:
Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
vibrator.vibrate(500); //振动500ms
5.通知到来时控制手机LED灯的显示:手机基本都会前置一个LED灯,当有未接电话或未读短信,手机又处于锁屏状态时,LED灯会
不停地闪烁,提醒用户去看。使用ledARGB,ledOnMS,ledOffMS以及flags这几个属性来实现这种效果。
(1)ledARGB用于控制LED灯的颜色,有红绿蓝三色可选;(2)ledOnMS用于指定LED灯亮起的时长,以毫秒为单位;(3)
ledOffMS用于指定LED灯暗去的时长,也是以毫秒为单位;(4)flags指定通知的一些行为,包括LED灯这一选项。
eg.当通知到来时,想要实现LED灯以绿色的灯光一闪一闪的效果,则代码:(本书用例废弃,现版已改动,未解决)
notification.ledARGB = Color.GREEN;
notification.ledOnMS = 1000;
notification.ledOffMS = 1000;
notification.flags = Notification.FLAG_SHOW_LIGHTS;
6.不进行繁杂的设置,直接使用通知的默认效果,会根据当前手机的环境决定播放什么铃声,以及如何振动。(本书用例废弃,现版已改动,未解决)
notification.defaults = Notification.DEFAULT_ALL;