通知(Notification)是在下拉状态栏显示的信息,就像~~推送,简单介绍下notification
首先,它需要一个管理者,就是NotificationManager,可以用如下方式获取:
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
然后,我们来获取Notification对象,有一个三个参数的Notification构造函数(貌似已经被抛弃,但是还可用,改成类似对话框的那种用Builder,具体以后研究下再更新),例如
Notification notification = new Notification(R.drawable.ic_launcher,"oh my god",System.currentTimeMillis());
第一个参数(int):icon,就是通知显示的图标id
第二个参数(CharSequence):给个字符串,当有通知时状态栏会显示的内容
第三个参数(long):通知创建的时间,单位毫秒
完成之后我们对通知的内容进行设置
notification.setLatestEventInfo(context,title,content,pendingIntent);
context就是上下文了,title则是通知的标题,content是内容(注意这是状态栏下拉后显示的,和构造函数的第二个参数显示的位置是不同的),至于pendingIntent在这里不多解释,不了解的可以百度下,它的参数中有个flag我查了下大神的解释,大概是这样的:
FLAG_CANCEL_CURRENT:如果当前系统中已经存在一个相同的PendingIntent对象,那么就将先将已有的PendingIntent取消,然后重新生成一个PendingIntent对象。
FLAG_NO_CREATE:如果当前系统中不存在相同的PendingIntent对象,系统将不会创建该PendingIntent对象而是直接返回null。
LAG_ONE_SHOT:该PendingIntent只作用一次。在该PendingIntent对象通过send()方法触发过后,PendingIntent将自动调用cancel()进行销毁,那么如果你再调用send() 方法的话,系统将会返回一个SendIntentException。
FLAG_UPDATE_CURRENT:如果系统中有一个和你描述的PendingIntent对等的PendingInent,那么系统将使用该PendingIntent对象,但是会使用新的Intent来更新之前 PendingIntent中的Intent对象数据,例如更新Intent中的Extras。
给上代码
Intent intent = new Intent(this,SecondActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
notification.setLatestEventInfo(context,“my title“,“my content“,pendingIntent);
这样就实现了点击通知后会跳到SecondActivity
最后调用notify就可以了
notificationManager.notify(3,notification);
3是这个通知的id,当我们要用cancel方法干掉这个通知的时候需要作为参数传进去,像notificationManager.cancel(3);
这样一个简单的通知就实现了,还有一些我们可能会经常用到的,像通知的声音,震动,LED灯闪烁等等,也简单说一说
我们在得到notification对象之后可以按自己的意愿设置很多东西,如果都不想管可以设置为默认,即
notification.defaults = Notification.FLAG_DEFAULT_ALL;
设置振动需要一个long数组,其中奇数位是不震动时长(ms),偶数位是震动时长,当状态栏被下拉会终止振动
long[] mVibrate = {0,1000,2000,3000};
像上面这句,0代表停0s,即发出通知会马上振动,1000则为振动1s,2000为停止振动2s,3000为振动3s...以此类推
notification.vibrate = mVibrate;
设置好之后需要加上权限
设置声音需要uri,可以这样
Uri uri = Uri.fromFile("声音文件路径");或者Uri.parse("路径"):
notification.sound = uri;
还有LED,这个东西在我手机上试了好像并没什么效果,所以...
notification.ledARGB = Color.RED;
notification.ledOnMs = 1000;
notification.ledOffMs = 2000;
notification.flags = Notification.FLAG_SHOW_LIGHTS;
上面代码是让红色led灯亮1s然后暗2s这样闪
目前就学习了这么多,等学习到新知识会及时跟大家分享的,写的不太细,感谢大家看完