通知,既可以在活动里创建,也可以在广播接收器里创建,也可以在服务里创建。(一般只有在程序进入到后台的时候我们才需要使用通知,所以在活动里创建通知的场景比较少)
创建通知:
- 需要一个NotificationManager对通知进行管理,调用getSystemService()获取,这个方法接收一个字符串参数用于确定获取系统的那个服务。
- 接下来使用一个Builder构造器来创建Notification对象。(因为Android系统每个版本都会对通知部分功能进行修改,郭神的建议是使用support-v4库)
- 设置title、text、通知时间、小图标
- 使用NotificationManager的notify()方法让通知显示出来。两个参数,
- 第一个参数是id,用于保证每个通知所指定的id都是不同的。
- 第二个参数就是对象Notification
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("我是通知title")
.setContentText("我是通知text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.build();
manager.notify(1, notification);
在界面添加一个按钮,为按钮添加事件,即我们刚写好的通知事件。
运行,点击按钮,手机上会出现一个通知,然而点击通知并没有什么动作,通知也没有消失,因为我们没有设置,接下来修改代码来实现:
- 点击通知跳转页面
- 点击通知后通知消息自动消失
- 通知来时,led灯闪烁
- 手机通知的默认效果
- 设置通知的级别
点击通知跳转页面
这里需要使用PendingIntent,使用它的getActivity方法,其中需要的参数,第一个是context,(第二个一般用不到,传0即可)第三个是Intent对象,使用这个对象构建出pendingIntent的意图,第四个参数用于确定pengdingIntent的行为,这里传入0。
Intent intent = new Intent(this, NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
...
.setContentIntent(pi)//设置点击通知的动作
点击通知后通知消息自动消失
两种方法:
方法一:在活动的oncreate方法里添加代码:
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.cancel(1);//1是对应通知的id
方法二,直接在Notification对象里添加代码:
.setAutoCancel(true)//设置点击后通知消息消失
通知的效果及其通知级别设置:
.setLights(Color.GREEN,1000,1000)//设置通知来是手机led等闪烁
.setDefaults(NotificationCompat.DEFAULT_ALL)//设置通知的默认效果,
.setPriority(Notification.PRIORITY_MAX)
完整代码:
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("我是通知title")
.setContentText("我是通知text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(pi)//设置点击通知的动作
.setAutoCancel(true)//设置点击后通知消息消失
.setLights(Color.GREEN,1000,1000)//设置通知来是手机led等闪烁
.setDefaults(NotificationCompat.DEFAULT_ALL)//设置通知的默认效果,
.setPriority(Notification.PRIORITY_MAX)
.build();
manager.notify(1, notification);