最近看《第一行代码》中关于通知Notification的部分,书中的例子在现在的Android studio中已经是不提倡,推荐用Builder代替,于是简单的试了试Notification.Builder,简单总结一下。
利用Notification.Builder获取Notification类的实例
Notification.Builder的简单用法如下:
Notification.Builder builder = new Notification.Builder(MainActivity.this);
builder.setTicker("This is a trcker");//通知栏的预览文字
builder.setSmallIcon(R.mipmap.xxx);//图标
builder.setContentTitle("This is title");//通知的标题
builder.setCOntentText("This is content");//通知的内容
builder.setWhen(System.currentTimeMillis());//设置通知时间为当前系统时间
Notification notification = builder.build();//获取Notification的实例
以上是一个简单的安卓通知样式,没什么好说的,setWhen()方法默认显示通知发出的时间,不写也可以。
利用NotificationManager发出通知
我们可以利用getSystemService( )方法来启动通知管理器。然后利用通知管理器的notify( )方法发出通知.notify( )方法有两个参数。第一个参数int类型是通知的编号,一般来说每个通知不同即可,第二个参数即上边我们构造的notification实例。
NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1, notification);
通知的清除可以在活动中用manager.cancel(1)来清除。
manager.cancel(1);
通知的高级用法
一般来说,notification和builder都可以设置通知的铃声提示灯和振动,这里我稍微写写builder的几个方法,notification的用法差不多,可以看《第一行代码》
builder.setVibrate(new long[] {0, 1000, 1000, 1000});//为通知设置震动,4个时间参数,单位为毫秒。
//第1个参数是延迟振动时间,第2个是振动时间,第3个是静止时间,第4个是静止后又振动的时间
//上边这个振动就是收到通知后,手机立刻振动1秒,停止振动1秒,接着再振动1秒。
Uri soundUri = Uri.fromFile("路径");
builder.setSound(soundUri);//设置指定路径下的通知提示音
builder.setDefaults(Notification.DEFAULT_ALL);//通知的提示音铃声振动全部采用系统默认值。
//也可以单独设定Notification.DEFAULT_LIGHTS或Notification.DEFAULT_SOUND或Notification.DEFAULT_VIBRATE
//设置默认后,自定义的铃声和振动都无效。
通知的点击事件
通知的点击事件通过PendingIntent类实现。
- 首先新建个PendingIntent的实例
Intent intent = new Intent(this, NoticeActivity.class);//点击通知后启动NoticeActivity
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
//4个构造参数,第1个是Context,第2个一般用不到,写0
//第3个就是上一行的intent,第4个是PendingIntent的行为模式,一般用PendingIntent.FLAG_CANCEL_CURRENT
2.利用builder添加PendingIntent实例
builder有三个不同的添加PendingIntent的方法:
builder.setContentIntent(pi);
builder.setDeleteIntent(pi);
builder.setFullScreenIntent(pi, true);
第一个方法就是最常用的,点击通知后进入新的活动。
第二个方法是用户清除通知后触发,进入新的活动。
第三个方法类似来电,收到通知后立刻在当前屏幕显示,这个方法显示的通知按照上边的写法无法启动NoticeActivity活动,原因我也不清楚= =,所以一般推荐用第一个方法添加PendingIntent。
另外,通知点击后默认不会自动清除,需要在NoticeActivity用manager.cancel(1)这个方法清除,或者在Notification里添加如下flag:
notification.flags = Notification.FLAG_AUTO_CANCEL;//点击通知后,通知会自动清除
notification.flags = Notification.FLAG_NO_CLEAR;//这个FLAG让用户无法手动清除通知,只能去点击。
网友评论