为了账号安全,请及时绑定邮箱和手机立即绑定

【Android】25.0 手机多媒体(三)——通知(Notification)(3):进阶篇 - 高级篇

标签:
Android
2.0 本篇所有内容,都只修改如下代码:
 Notification notification = null;
  ...
notification = new NotificationCompat.Builder(this, id)
                        .setContentTitle("永远的周星驰")//设置通知栏标题
                        .setContentText("周星驰是华语影坛的标志性人物之一,被誉为中国的查理·卓别林。\n" +                                " 20世纪90年代,由于他主演的电影屡破票房纪录,因此他与" +                                "成龙、周润发并称为“双周一成”,意为香港电影的票房保证" +                                "。他不仅在商业电影方面取得了很高的成就,而且还制造了具有独特风格的" +                                "无厘头式喜剧,更缔造了“周星驰现象” 。")                        //设置通知栏显示内容
                        .setWhen(System.currentTimeMillis())//通知产生的时间。
                        // 会在通知信息里显示,通常是系统获取到的时间
                        .setSmallIcon(R.mipmap.ic_launcher)//设置通知小ICON
                        .setLargeIcon(BitmapFactory.decodeResource(getResources()
                                , R.mipmap.ic_launcher))//设置通知大ICON
                        .setContentIntent(pi)//通知点击事件响应
                        .setAutoCancel(true)//表明通知响应同时就消失
                        .build();
3.0 首先,我们把内容文本放一大段内容,执行效果如下:


https://img1.sycdn.imooc.com//5d3283dc0001204e05731119.jpg

Screenshot_20190222_205625_com.example.notificati.jpg


可以看到,多余的内容会通过省略号...隐藏。


4.0 状态栏通知的时候要有声音带振动,振动带忽闪忽闪……

本小节所有内容属于进阶篇,实现3种效果:

  • 通知发出的时候,放声音

  • 通知发出的时候,手机振动

  • 通知发出的时候,呼吸灯忽闪忽闪的(手机的前面有个指示灯,满电绿色,充电橙色,快没电了红色,注意到没有?)
    代码如下:

 Notification notification = null;
  ...
notification = new NotificationCompat.Builder(this, id)
                        .setContentTitle("永远的周星驰")//设置通知栏标题
                        .setContentText("周星驰是华语影坛的标志性人物之一,被誉为中国的查理·卓别林。\n" +                                " 20世纪90年代,由于他主演的电影屡破票房纪录,因此他与" +                                "成龙、周润发并称为“双周一成”,意为香港电影的票房保证" +                                "。他不仅在商业电影方面取得了很高的成就,而且还制造了具有独特风格的" +                                "无厘头式喜剧,更缔造了“周星驰现象” 。")                        //设置通知栏显示内容
                        .setWhen(System.currentTimeMillis())//通知产生的时间。
                        // 会在通知信息里显示,通常是系统获取到的时间
                        .setSmallIcon(R.mipmap.ic_launcher)//设置通知小ICON
                        .setLargeIcon(BitmapFactory.decodeResource(getResources()
                                , R.mipmap.ic_launcher))//设置通知大ICON
                        .setContentIntent(pi)
                        .setAutoCancel(true)                   
                        //下面这三个无法生效。
                        // 发通知的同时,发出声音
                        .setSound(Uri.fromFile(new File("/system/media//audio/ringtones/Bongo .ogg")))                        //设置手机振动,振动一秒,静止1秒,再振动1秒
                        .setVibrate(new long[]{0, 1000, 1000, 1000})                        //前置LED灯一闪一闪(1秒后亮,1秒后灭):
                        .setLights(Color.GREEN,1000,1000)                        //默认效果设定
                        //.setDefaults(Notification.DEFAULT_ALL)
                        .build();

默认效果设定和这三个效果设定不能同时出现……,不然总有一个没有意义。(事实上,上面的这三个代码都没有看出来效果……,全部失效。)
所以,这一整套内容还需要更深层次的解决方案。
可以参考这篇文章:
Android Notification使用总结

5.0 高级篇来了,总共三个内容:
  • 如果真的非常需要在通知栏里面显示一段长文字,Android也可以做到,通过.setStyle ( )方法

  • 通知里面甚至可以直接显示一张图片,通过.setStyle ( )方法

  • 设置优先级,如果你总是设置最高级别,小心我们的程序因为惹人生厌被卸载掉。,通过.setPriority ( )方法

    5.1 先看代码:

notification = new NotificationCompat.Builder(this, id)
                        .setContentTitle("永远的周星驰")//设置通知栏标题
                        .setContentText("周星驰是华语影坛的标志性人物之一,被誉为中国的查理·卓别林。\n" +                                " 20世纪90年代,由于他主演的电影屡破票房纪录,因此他与" +                                "成龙、周润发并称为“双周一成”,意为香港电影的票房保证" +                                "。他不仅在商业电影方面取得了很高的成就,而且还制造了具有独特风格的" +                                "无厘头式喜剧,更缔造了“周星驰现象” 。")                        //设置通知栏显示内容
                        .setWhen(System.currentTimeMillis())//通知产生的时间。
                        // 会在通知信息里显示,通常是系统获取到的时间
                        .setSmallIcon(R.mipmap.ic_launcher)//设置通知小ICON
                        .setLargeIcon(BitmapFactory.decodeResource(getResources()
                                , R.mipmap.ic_launcher))//设置通知大ICON
                        .setContentIntent(pi)
                        .setAutoCancel(true)
                        .setStyle(new NotificationCompat.BigTextStyle().bigText(                                "20世纪90年代,由于他主演的20世纪90年代,由20世纪90年代,由于" +                                        "20世纪90年代,由于他主演的电影屡破票房纪录,因此他与" +                                        "成龙、周润发并称为“双周一成”"))                        //下面这三个无法生效。
                        // 发通知的同时,发出声音//                        .setSound(Uri.fromFile(new File("/system/media//audio/ringtones/Bongo .ogg")))
                        //设置手机振动,振动一秒,静止1秒,再振动1秒//                        .setVibrate(new long[]{0, 1000, 1000, 1000})
                        //前置LED灯一闪一闪://                        .setLights(Color.GREEN,1000,1000)

                        //默认效果设定//                        .setDefaults(Notification.DEFAULT_ALL)
                        .build();

注意:上面代码中的.setContentText( )方法和.setStyle( )方法,里面的内容是不一样的,这样会产生一个很有意思的效果,执行如下:

https://img1.sycdn.imooc.com//5d3283e80001602005771129.jpg

Screenshot_20190222_205625_com.example.notificati.jpg


点击通知条“刚刚”右边的小箭头:

https://img1.sycdn.imooc.com//5d3283f200018c9205691226.jpg

Screenshot_20190222_205650_com.example.notificati.jpg


发现没有,当点击通知条“刚刚”右边的小箭头后,显示的内容和拉开前显示的内容不一样。


5.2 再看代码,实现插入通知栏图片:

notification = new NotificationCompat.Builder(this, id)
                        .setContentTitle("永远的周星驰")//设置通知栏标题
                        .setContentText("周星驰是华语影坛的标志性人物之一,被誉为中国的查理·卓别林。\n" +                                " 20世纪90年代,由于他主演的电影屡破票房纪录,因此他与" +                                "成龙、周润发并称为“双周一成”,意为香港电影的票房保证" +                                "。他不仅在商业电影方面取得了很高的成就,而且还制造了具有独特风格的" +                                "无厘头式喜剧,更缔造了“周星驰现象” 。")                        //设置通知栏显示内容
                        .setWhen(System.currentTimeMillis())//通知产生的时间。
                        // 会在通知信息里显示,通常是系统获取到的时间
                        .setSmallIcon(R.mipmap.ic_launcher)//设置通知小ICON
                        .setLargeIcon(BitmapFactory.decodeResource(getResources()
                                , R.mipmap.ic_launcher))//设置通知大ICON
                        .setContentIntent(pi)
                        .setAutoCancel(true)
                        .setStyle(new NotificationCompat.BigTextStyle().bigText(                                "20世纪90年代,由于他主演的20世纪90年代,由20世纪90年代,由于" +                                        "20世纪90年代,由于他主演的电影屡破票房纪录,因此他与" +                                        "成龙、周润发并称为“双周一成”"))
                        .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.big_image)))                        //下面这三个无法生效。
                        // 发通知的同时,发出声音//                        .setSound(Uri.fromFile(new File("/system/media//audio/ringtones/Bongo .ogg")))
                        //设置手机振动,振动一秒,静止1秒,再振动1秒//                        .setVibrate(new long[]{0, 1000, 1000, 1000})
                        //前置LED灯一闪一闪://                        .setLights(Color.GREEN,1000,1000)
                        //默认效果设定//                        .setDefaults(Notification.DEFAULT_ALL)
                        .build();

执行结果如下:


https://img1.sycdn.imooc.com//5d3283fb0001895105771232.jpg

Screenshot_20190222_205625_com.example.notificati.jpg

点击通知条“刚刚”右边的小箭头:


https://img1.sycdn.imooc.com//5d328407000181c005711226.jpg

Screenshot_20190222_205713_com.example.notificati.jpg

当点击通知条“刚刚”右边的小箭头后,显示的内容和拉开前显示的内容是一样的,说明此时同时存在时会显示图片的.setStyle ( )方法。

5.3 优先级有5个常量值可选:

  • PRIORITY_LOW 较低的重要程度,系统可能将这一类通知缩小,或者改变其显示的顺序,将其摆到更重要的通知之后。

  • PRIORITY_HIGH 较高的重要程度,系统可能将这一类通知放大,或者改变其显示的顺序,将其摆在比较靠前的位置。

  • PRIORITY_MIN 最低的重要程度,系统可能只会在特定的场景才显示这条通知,比如用户下拉状态栏的时候。

  • PRIORITY_MAX 最高的重要程序,这类通知消息必须要用户立刻看到,甚至需要用户做出相应。

  • PRIORITY_DEFAULT 默认,等同于不设置效果
    代码如下:

notification = new NotificationCompat.Builder(this, id)
                        .setContentTitle("永远的周星驰")//设置通知栏标题
                        .setContentText("周星驰是华语影坛的标志性人物之一,被誉为中国的查理·卓别林。\n" +                                " 20世纪90年代,由于他主演的电影屡破票房纪录,因此他与" +                                "成龙、周润发并称为“双周一成”,意为香港电影的票房保证" +                                "。他不仅在商业电影方面取得了很高的成就,而且还制造了具有独特风格的" +                                "无厘头式喜剧,更缔造了“周星驰现象” 。")                        //设置通知栏显示内容
                        .setWhen(System.currentTimeMillis())//通知产生的时间。
                        // 会在通知信息里显示,通常是系统获取到的时间
                        .setSmallIcon(R.mipmap.ic_launcher)//设置通知小ICON
                        .setLargeIcon(BitmapFactory.decodeResource(getResources()
                                , R.mipmap.ic_launcher))//设置通知大ICON
                        .setContentIntent(pi)
                        .setAutoCancel(true)
                     
                        .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.big_image)))
                        .setPriority(NotificationCompat.PRIORITY_HIGH)                        //下面这三个无法生效。
                        // 发通知的同时,发出声音//                        .setSound(Uri.fromFile(new File("/system/media//audio/ringtones/Bongo .ogg")))
                        //设置手机振动,振动一秒,静止1秒,再振动1秒//                        .setVibrate(new long[]{0, 1000, 1000, 1000})
                        //前置LED灯一闪一闪://                        .setLights(Color.GREEN,1000,1000)
                        //默认效果设定//                        .setDefaults(Notification.DEFAULT_ALL)
                        .build();

小心!当优先级设置过高时,如果让用户感到反感的哈,小心程序被卸载掉。
(事实上实际运行的时候,一般没有多大变化……)



作者:我睡醒刚刚
链接:https://www.jianshu.com/p/13b2dd745105


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消