1、首先需要一个NotificationManager来对通知进行管理,可以调用Context的getSystemService()方法获取到。getSystemService()方法接收一个字符串参数用于确定获取系统的哪个服务。
String service=NOTIFICATION_SERVICE;//获取系统服务
NotificationManager notificationManager= (NotificationManager) getSystemService(service);
2、创建一个Notification对象,这个对象用于存储通知所需的各种信息,可用它的有参构造函数进行创建,接收3个参数:
(1)第一个参数用于指定通知的图标
(2)第二个参数用于指定通知的ticker内容,当通知刚被创建的时候,它会在系统的状态栏一闪而过,属于一种瞬时的提示信息。
(3)第三个参数用于指定通知被创建的时间,以毫秒为单位,当下拉系统状态栏时,这里指定的时间会显示在相应的通知上。
Notification notification=new Notification(R.mipmap.ic_launcher,"Notification测试",System.currentTimeMillis());
3、创建好对象后,需要对通知的布局进行设定,这里只需要调用Notification的setLatestEventInfo()方法给通知设定一个标准的布局,接收4个参数:
(1)第一个是Context
(2)第二个是置顶通知的标题内容,下拉系统状态栏可以看到这部分。
(3)第三个用于指定正文的内容,同样下拉系统状态栏就会看到这部分内容。
(4)PendingIntent对象
Intent intent=new Intent(MainActivity.this,MainActivity.class);
PendingIntent pendingIntent=PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
notification.setLatestEventInfo(this,"我的标题","我的内容",pendingIntent);
4、最后调用NotificationManager的notify()方法就可以让通知显示出来。notify()接收两个参数,第一个是id,要保证每个通知所指定的id都是不同的;第二个是Notification对象。
notificationManager.notify(1,notification);//发出通知
5、取消通知
notificationManager.cancel(1);//取消通知
PS:PendingIntent和Intent区别
1、Intent倾向于去立即执行某个动作
2、PendingIntent倾向于在某个合适的时机去执行某个动作,可以理解为延迟执行的Intent。
PendingIntent用法:
它主要提供几个静态方法(getActivity()、getBroadcast()、getService()方法)用于获取PendingIntent的实例。
它们接收的参数是相同的:
(1)、Context
(2)、第二个参数一般用不到,传入0即可。
(3)、Intent对象
(4)、用于确定PendingIntent的行为。有:
FLAG_CANCEL_CURRENT:如果当前系统中已经存在一个相同的PendingIntent对象,那么就将先将已有的PendingIntent取消,然后重新生成一个PendingIntent对象。
FLAG_NO_CREATE:如果当前系统中不存在相同的PendingIntent对象,系统将不会创建该PendingIntent对象而是直接返回null。
FLAG_ONE_SHOT:该PendingIntent只作用一次。在该PendingIntent对象通过send()方法触发过后,PendingIntent将自动调用cancel()进行销毁,那么如果你再调用send()方法的话,系统将会返回一个SendIntentException。
FLAG_UPDATE_CURRENT:如果系统中有一个和你描述的PendingIntent对等的PendingInent,那么系统将使用该PendingIntent对象,但是会使用新的Intent来更新之前PendingIntent中的Intent对象数据,例如更新Intent中的Extras。