文章目录
Android通知(Notification)的高级功能
继续观察NotificationCompat.Builder这个类,你会发现里面还有很多API是我们没有使用过的。那么下面我们就来学习一些更加强大的API的用法,从而构建出更加丰富的通知效果。
setStyle
NotificationCompat.BigTextStyle
先来看看setStyle()方法,这个方法允许我们构建出富文本的通知内容。也就是说通知中不光可以有文字和图标,还可以包含更多的东西。setStyle()方法接收一个NotificationCompat.Style参数,这个参数就是用来构建具体的富文本信息的,如长文字、图片等。
在开始使用setStyle()方法之前,我们先来做一个试验吧,之前的通知内容都比较短,如果设置成很长的文字会是什么效果呢?比如这样写:
Notification notification = new NotificationCompat.Builder(this)
...
.setContentText("Learn how to build notifications, send and sync data, and use
voice actions. Get the official Android IDE and developer tools to build
apps for Android.")
...
.build();
现在重新运行程序并触发通知,效果如图所示:
可以看到,通知内容是无法显示完整的,多余的部分会用省略号来代替。其实这也很正常,因为通知的内容本来就应该言简意赅,详细内容放到点击后打开的活动当中会更加合适。
但是如果你真的非常需要在通知当中显示一段长文字,Android也是支持的,通过setStyle()方法就可以做到,具体写法如下:
Notification notification = new NotificationCompat.Builder(this)
...
.setStyle(new NotificationCompat.BigTextStyle().bigText("Learn how to build
notifications, send and sync data, and use voice actions. Get the official
Android IDE and developer tools to build apps for Android."))
.build();
我们在setStyle()方法中创建了一个NotificationCompat.BigTextStyle对象,这个对象就是用于封装长文字信息的,我们调用它的bigText()方法并将文字内容传入就可以了。再次重新运行程序并触发通知,效果如图所示:
NotificationCompat.BigPictureStyle
除了显示长文字之外,通知里还可以显示一张大图片,具体用法也是基本相似的:
Notification notification = new NotificationCompat.Builder(this)
...
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture
(BitmapFactory.decodeResource(getResources(), R.drawable.big_image)))
.build();
可以看到,这里仍然是调用的setStyle()方法,这次我们在参数中创建了一个NotificationCompat.BigPictureStyle对象,这个对象就是用于设置大图片的,然后调用它的bigPicture()方法并将图片传入。这里我事先准备好了一张图片,通过BitmapFactory的decodeResource()方法将图片解析成Bitmap对象,再传入到bigPicture()方法中就可以了。
现在重新运行一下程序并触发通知,效果如图所示:
这样我们就把setStyle()方法中的重要内容基本都掌握了。
setPriority
接下来再学习一下setPriority()方法,它可以用于设置通知的重要程度。
setPriority()方法接收一个整型参数用于设置这条通知的重要程度,一共有5个常量值可选:PRIORITY_DEFAULT表示默认的重要程度,和不设置效果是一样的;PRIORITY_MIN表示最低的重要程度,系统可能只会在特定的场景才显示这条通知,比如用户下拉状态栏的时候;PRIORITY_LOW表示较低的重要程度,系统可能会将这类通知缩小,或改变其显示的顺序,将其排在更重要的通知之后;PRIORITY_HIGH表示较高的重要程度,系统可能会将这类通知放大,或改变其显示的顺序,将其排在比较靠前的位置;PRIORITY_MAX表示最高的重要程度,这类通知消息必须要让用户立刻看到,甚至需要用户做出响应操作。具体写法如下:
Notification notification = new NotificationCompat.Builder(this)
...
.setPriority(NotificationCompat.PRIORITY_MAX)
.build();
这里我们将通知的重要程度设置成了最高,表示这是一条非常重要的通知,要求用户必须立刻看到。现在重新运行一下程序,并点击Send notice按钮,效果如图所示:
可以看到,这次的通知不是在系统状态栏显示一个小图标了,而是弹出了一个横幅,并附带了通知的详细内容,表示这是一条非常重要的通知。不管用户现在是在玩游戏还是看电影,这条通知都会显示在最上方,以此引起用户的注意。
当然,使用这类通知时一定要小心,确保你的通知内容的确是至关重要的,不然如果让用户产生反感的话,很可能会导致我们的应用程序被卸载。
如果对你有帮助,就一键三连呗(关注+点赞+收藏),我会持续更新更多干货~~