Android通知(Notification)

Notification的创建

使用通知,首先主要或者NotificationManager

NotificationManager manager = 
(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

接下来需要使用Builder 构造器来创建Notification对象。但是问题在于,几乎Android 系统的每一个版本都会对通知这部分功能进行或多或少的修改,API的不稳定性问题在通知上面凸显得尤其严重。解决方案就是使用support 库提供的兼容API。support-v4 库中提供了一个NotificationCompat类,使用这个类的构造器来创建Notification对象,就可以保证我们的程序在所有的android 系统版本上都能正常工作。代码如下:

Notification notification = new NotificationCompat.Builder(context).build();

具体创建如下:

Notification notification = new NotificationCompat.Builder(context)
	.setContentTitle("this is content title")
	.setContentText("this is content text")
	.setWhen(System.currentTimeMills())
	.setSmallIcon(R.drawable.small_icon)
	.setLargeIcon(BitmapFactory.decodeResource(getResources()), R.drawable.large_icon)
	.build();

上述代码一个调用了5个设置方法。setContentTitle() 用于指定通知的标题内容,setContentText() 用于指定通知的正文内容, setWhen() 用于指定通知被创建的时间,以毫秒为单位, setSmallIcon() 用于设置通知的小图标, setLargeIcon() 用于设置通知的大图标。
以上工作完成后, 只需要调用 NotificationManager的notify()方法就可以让通知显示出来了。notify() 方法有两个参数,第一个是ID,要保证每个通知所指定的id是不同的,第二个参数则是Notification对象,这里直接将我们创建的对象传入。

manager.notify(1, notification);
Notification 点击事件

现在通知消息已经成功了,但是缺少点击事件。PendingIntent 可以用来实现Notification的点击。
PendingIntent提供了几个静态方法:getActivity() ,getBroadcast(), getService() 方法,这几个方法所接收的参数都是相同的,第一个参数依旧是context,第二个参数一般用不到,通常都是传入0即可。第三个参数是一个intent对象,我们可以通过这个对象构建出PendingIntent的"意图"。第四个参数用于确定PendingInent的行为,有FLAG_ONE_SHOTFLAG_NO_GREATEFLAG_CANCEL_CURRENTFLAG_UPDATE_CURRENT 这四种值可选,通常情况下这个参数传入0就可以了。
NotificationCompat.Builder 这个构造器还可以连缀一个 setContentIntent() 方法,接收的参数正是一个pendingIntent对象。
修改上述代码:

Intent intent = new Intent(this, NotificationActivity.class);
PendingIntent pi = new PendingIntent.getActivity(this,0,intent,0);  //初始化意图
Notification notification = new NotificationCompat.Builder(context)
	.setContentTitle("this is content title")
	.setContentText("this is content text")
	.setWhen(System.currentTimeMills())
	.setSmallIcon(R.drawable.small_icon)
	.setLargeIcon(BitmapFactory.decodeResource(getResources()), R.drawable.large_icon)
	.setContentIntent(pi)                  //设置意图
	.build();
Notification 取消

1)NotificationCompat.Builder 中再连缀一个 setAutoCancel()方法

Notification notification = new NotificationCompat.Builder(this)
	..
	.setAutoCancel(true)
	.build();

可以看到,setAutoCancel()方法传入true,就表示点击这个通知的时候,通知会自动取消
2)使用NotificationManager.cancel()方法

NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
manager.cancel(1);

使用cancel方法,方法中传入 1,即 通知的id ,就可以取消该通知。

Notification高级功能

通知发出的时候播放一段音频

Notification notification = new NotificationCompat.Builder(this)
...
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
.build();

通知发出的时候手机震动

Notification notification = new NotificationCompat.Builder(this)
...
.setVibrate(new long[]{0,1000,1000,1000})
.build();

手机震动需要权限,需要在AndroidManifest.xml中添加权限:

<uses-persmission android:name="android.permission.VIBRATE" />

通知发出时手机LED灯控制

Notification notification = NotificationCompat.Builder(this)
...
.setLights(Color.GREEN, 1000,1000)
.build();

通知发出时 手机的默认设置
如果你不想设置这么多东西,可以设置默认效果,它会根据手机环境来决定播放什么铃声,以及如何震动

.setDefaults(NotificationCompat.DEFAULT_ALL)

setStyle()构建具体的富文本信息,如长文字,图片等
构建长文本

.setStyle(new NotificationCompat.BigTextStyle().bigText("Learn how to biild notification,
,send and sync ........................................................................"))
.build();  //无论多长的文字都不会被省略

显示一张大图片

.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BipmapFactory.decodeResource(getResource(), R.drawable.big_image))
.build();  //显示大图

setPriority() 设置通知的重要程度
setPriority方法接收一个整形参数用于设置这条通知的重要程度,一共有5个常量可选:

  • PRIORITY_DEFAULT 常量表示默认的重要程度
  • PRIORITY_MAIN 表示最低的重要程度,系统可能只会在特定的场景才会显示此通知,比如用户下拉状态栏的时候
  • PRIORITY_LOW 表示较低的重要程度,系统可能会将此类通知缩小,或改变其显示的顺序,将其排在最重要的通知之后
  • PRIORITY_HIGH 表示较高的重要程度,系统可能会将此类通知放大,或改变其显示顺序,排在比较靠前的位置
  • PRIORITY_MAX 表示最高的重要程度,这类通知信息必须要让用户立刻看到,甚至需要用户做出响应操作

具体写法如下:

.setPriority(NotificationCompat.PRIORITY_MAX)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值