使用通知的基本步骤:
1、首先我们需要一个NotificationManager类来管理通知,可以通过getSystemService()方法获得该对象,getSystemService()接受一个参数,用来确认获取系统的哪个服务,在这里我们只需要传入Context.NOTIFICATION_SERVICE
NotificationManager notificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICER);
2、在获得NotificationManager对象后,接下来使用Builder构造器来创建一个Notification对象:
Notification notification=new NotificationCompat.Builder(context)
//设置通知的标题
.setContentTitle("xxx")
设置通知的内容
.setContentText("xxx")
//指定通知被创建的时间,以毫秒为单位
.setContentWhen(System.currentTimeMills)
//设置通知的小图标
.setSmallIcon(R.drawable.small_icon)
//设置通知的大图标
.setLargeIcon(BitmapFactory.decodeResource(getResource(),R.drawable.large_icon))
.build();
3、完成以上2步操作后,直接使用NotificationManager.notify():
notificationManager.notifity(id,notification);
第一个参数:第一个参数位ID,我们要保证每个通知的的ID都是不同的。
第二个参数:构建好的notification对象
通过使用NotificationManager对象调用notifity(id,nitification)方法后,我们可以看到看到通知的效果,那么The question coming 哈哈哈,当你试着去点击这个通知的时候你会发现他是没有任何反应的。要想让我们的通知能在用户点击的时候作一些我们想要的事情,这个时候要使用什么,大声的喊出来~~~意图君(Intent)!
二、PendingIntent
Intent是我们在Android中想让代码做任何东西第一个想到的一个对象,那么我们这里的通知是不是也使用Intent对象来为我们自己搞事情呢,现实并不是而是通过Pendingntent,看名字就知道和Intent有点像。先说一下两者的区别,Intent一般是指立即执行的一个动作,而PendingIntent则是指在合适的时间去执行一个动作,我们的通知希望用户在点击了通知的情况下才会去执行这个动作,简单的说就是可以把pendingIntent理解为延迟的Intent。
在说明PendingIntent之前,必须交代以下通知应用的场景,一般情况下,我们会在应用没有处于当前显示的情况下才会通过通知提示用户,因为没有人会傻乎乎在自己的App内通过一个通知告诉用户他登录成功了。理解了应用场景后,我们来讲解一下如何获取PendingIntent对象,PendingIntent中封装了3个静态方法,我们可以通过以下方式获得PendingIntent对象:
//这个获取PendingIntent的方法是在Activcity中使用的(如果你真得6到在自己Acticvity使//用通知的话)
a、PendingIntent pendingIntent=PendingIntent.getActivity(context,0,intent,0),
//这个方式是我们在广播接受
b、PendingIntent pendingIntent=PendingIntent.getBroadcast(context,0,intent,0);
//在服务中想要获得PendingIntent需要使用该方法
c、PendingIntent pendingIntent=PendingIntent.getService(context,0,intent,0);
三个静态方法的参数都是一样的,分别介绍一下4个参数:
context:上下文对象
第二个参数一般用不上,我也不知道具体有什么用,一般直接传入0就可以了,有知道大神请告诉我哈
intent:意图对象,这个相信不需要的去讲解大家都也知道了
第四个参数用于确定PendingIntent的行为,有FLAG_ONE_SHOT,FLAG_NO_CREATE,FLAG_CANCELCURRENT,FLAG_UPDATE_CURRENT.一般情况下填入0即可。
然后在构造notification对象的时候调用setContentIntent(pendingIntent)参数为我们创建的PendingIntent对象,点击事件就是我们PendingIntent对象中参数Intent对象。
设置了点击触发事件后,点击后发现通知并没有关闭,我们可以使用
Notification notification=new NotificationCompat.Builder(this)
...
.setAutoCancel(true)
.build();
//设置通知铃声
Notification notification=new NotificationCompat.Builder(this)
...
.setSound(Uri.fromFile(new File("音频存放位置")))
.build();
//设置手机振动
Notification notification=new NotificationCompat.Builder(this)
...
.setVibrate(new long[]{0,1000,1000,100})
.build();
//设置提示LED灯亮起
Notification notification=new NotificationCompat.Builder(this)
...
.setLights(Color.GREEN,1000,1000)
.build();
//如果你什么都不想设置的话,还有一个更加简单粗暴的方法
Notification notification=new NotificationCompat.Builder(this)
...
.setDefaults(NotificationCompat.DEFAULT_ALL)
.build();
这里根据当前手机环境去决定播放什么铃声,如何振动以及LED灯光闪烁的时间以及颜色
三、通知的高级功能
可以在notification中调用.setPriority(NotificationCompat.PRIORITY_MAX)设置notification对象的优先级
Notification notification=new NotificationCompat.Builder(this)
...
.setPriority(NotificationCompat.PRIORITY_MAX)
.build();
通知的优先级一共有五个:
最低优先级:PRIORITY_MIN
低优先级:PRIORITY_LOW
默认优先级:PRIORITY_DEFAULT
高优先级:PRIORITY_HIGH
最高优先级:PRIORITY_MAX
使用setStyle()让我们的通知变得多样化,比如通知内容长内容,通知附加大图片等等
//使用setStyle()让我们通知内容为长文字
Notification notification=new NotificationCompat.Builder(this)
...
.setStyle(new NotificationCompat.BigTextStyle().bigText("xxx"))
.build();
//使用setStyle让我们的通知内容为大图片
Notification notification=new NotificationCompat.Builder(this)
...
.setStyle(new NotificationCompat.BigPictrueStyle().bigPictrue(BitmapFactory.decodeResource(getResources(),R.drawable.big_image)))
.build();