一、概述

1、Notification,是一种具有全局效果的通知,可以在系统的通知栏中显示。在发出一条通知后,手机最上方的状态栏会显示一个通知的图标,下拉状态栏后就可以看到通知的详细内容。

2、样式

其属性描述如下:

1.代表: 通知标题,通过 setContentTitle() 方法设置。
2.代表: 大图标,通过 setSmallIcon() 方法设置。
3.代表:  通知内容,通过 setContentText() 方法设置。 
4.代表: 通知消息 
5.代表:小图标,通过 setLargeIcon() 方法设置。
6.代表: 通知时间,一般为系统时间,也可以使用setWhen()设置。

当 setSmallIcon() 与 setLargeIcon() 同时存在时, smallIcon 显示在通知的右下角, largeIcon 显示在左侧;当只设置 setSmallIcon() 时, smallIcon 显示在左侧。

二、基本用法

1、创建通道

NotificationChannel是android8.0新增的特性,如果App的targetSDKVersion>=26,没有设置channel通知渠道的话,就会导致通知无法展示。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//android 8.0以上需要特殊处理,也就是targetSDKVersion为26以上createNotificationChannel();
}@TargetApi(Build.VERSION_CODES.O)
private void createNotificationChannel() {NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);channel.canBypassDnd();//是否绕过请勿打扰模式channel.enableLights(true);//闪光灯channel.setLockscreenVisibility(VISIBILITY_SECRET);//锁屏显示通知channel.setLightColor(Color.RED);//闪关灯的灯光颜色channel.canShowBadge();//桌面launcher的消息角标channel.enableVibration(true);//是否允许震动channel.getAudioAttributes();//获取系统通知响铃声音的配置channel.getGroup();//获取通知取到组channel.setBypassDnd(true);//设置可绕过 请勿打扰模式channel.setVibrationPattern(new long[]{100, 100, 200});//设置震动模式channel.shouldShowLights();//是否会有灯光getManager().createNotificationChannel(channel);
}

1)NotificationChannel的方法列表

getId()    获取ChannelId
enableLights(boolean boolean)    是否开启指示灯(是否在桌面icon右上角展示小红点)
setLightColor()    设置指示灯颜色
enableVibration()    是否开启整的
setVibrationPattern()     设置震动频率
setImportance()    设置频道重要性
getImportance()     获取频道重要性
setSound()     设置声音
getSound()     获取声音
setGroup()    设置 ChannleGroup
getGroup()     得到 ChannleGroup
setBypassDnd()     设置绕过免打扰模式
canBypassDnd()     检测是否绕过免打扰模式
getName()     获取通知渠道名称
setLockScreenVisibility()     设置是否应在锁定屏幕上显示此频道的通知
getLockscreenVisibility()     检测是否应在锁定屏幕上显示此频道的通知
setShowBadge()    设置是否显示角标
canShowBadge()     检测是否显示角标
2)重要程度

数值越高,提示权限就越高,最高的支持发出声音和悬浮通知,如下所示:

public class NotificationManager {
    ......
    public static final int IMPORTANCE_DEFAULT = 3;
    public static final int IMPORTANCE_HIGH = 4;
    public static final int IMPORTANCE_LOW = 2;
    public static final int IMPORTANCE_MAX = 5;
    public static final int IMPORTANCE_MIN = 1;
    public static final int IMPORTANCE_NONE = 0;
    public static final int IMPORTANCE_UNSPECIFIED = -1000;
 
}
2、发出通知

Notification notification = new NotificationCompat.Builder(this, "chat").setAutoCancel(true).setContentTitle("收到消息").setContentText("什么").setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)//设置红色.setColor(Color.parseColor("#F00606")).setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)).setContentIntent(pendingIntent).build();manager.notify(1, notification);

调用NotificationManager的notify()方法即可

3、删除NotificationChann

调用NotificationManager的deleteNotificationChannel(int chatChannelId)即可。

4、PendingIntent

1)PendingIntent 是一种特殊的 Intent ,用于在某个事件结束后执行特定的 Action 。当用户点击通知时,才会执行。

2)PendingIntent获取方式:

PendingInteng.getBroadcast(contex, requestCode, intent, flags)
PendingInteng.getService(contex, requestCode, intent, flags)
PendingInteng.getActivity(contex, requestCode, intent, flags)
PendingInteng.getActivities(contex, requestCode, intent, flags) 其中flags属性参数用于确定PendingIntent的行为:
FLAG_ONE_SHOT: 表示返回的PendingIntent仅能执行一次,执行完后自动消失
FLAG_NO_CREATE: 表示如果描述的PendingIntent不存在,并不创建相应的PendingIntent,而是返回NULL
FLAG_CANCEL_CURRENT: 表示相应的PendingIntent已经存在,则取消前者,然后创建新的PendingIntent
FLAG_UPDATE_CURRENT: 表示更新的PendingIntent,如果构建的PendingIntent已经存在,则替换它,常用。

5、自定义通知栏

 protected void showRemoteViewsNotification() {Notification.Builder builder = new Notification.Builder(this);builder.setTicker("Hello RemotesViews!");// 收到通知的时候用于显示于屏幕顶部通知栏的内容builder.setSmallIcon(R.drawable.ic_launcher);// 设置通知小图标,在下拉之前显示的图标builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));// 落下后显示的图标builder.setWhen(System.currentTimeMillis());builder.setOngoing(true);// 不能被用户x掉,会一直显示,如音乐播放等builder.setAutoCancel(true);// 自动取消builder.setOnlyAlertOnce(true);// 只alert一次builder.setDefaults(Notification.DEFAULT_ALL);mRemoteViews.setImageViewResource(R.id.logo, R.drawable.large_icon);mRemoteViews.setTextViewText(R.id.notify_title, "这是自定义view的title");mRemoteViews.setTextViewText(R.id.notify_content, "这里是自定义view的内容");mRemoteViews.setTextViewText(R.id.notify_time, getCurrentTime());builder.setContent(mRemoteViews);Intent intent = new Intent(this, SecondActivity.class);intent.putExtra(SINGLE, REMOTE_VIEWS_NOTIFICATION);intent.setPackage(this.getPackageName());PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);builder.setContentIntent(pendingIntent);Notification notification = builder.build();notification.flags = Notification.FLAG_AUTO_CANCEL;NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);manager.notify(0, notification);}

6、显示多条通知

参考:https://blog.csdn.net/black_bread/article/details/63255435

7、消息数显示

参考:https://blog.csdn.net/An_nAl/article/details/77840339

8、使用Android Foreground Service来进行保活

https://www.cnblogs.com/renhui/p/8575299.html

9、通知栏消息点击监听

https://blog.csdn.net/weixin_42776111/article/details/103351699

注意:1、点击按钮事件取消横幅在NotificationClickReceiver广播中取消

NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);  notificationManager .cancel(notifyId);

2、PendingIntent pendingIntent = PendingIntent.getBroadcast(Activity.this, 0, intent, 0);  其中requestCode设置notifyId号,可以实现消息点击事件一一对应关系;

10、展开/折叠 系统下拉通知栏

https://blog.csdn.net/baiyulinlin1/article/details/53992807

11、通知跳转到指定页面

TaskStackBuilder.create(this).addParentStack(resultIntent.getComponent()).addNextIntent(resultIntent).startActivities();

参考:https://www.jianshu.com/p/1439c8bbc34b

Android--Notification横幅通知栏相关推荐

  1. android系统通知栏的弹框流程,Android Notification 手机系统横幅弹出提示框调用

    类似于仿微信信息提示提出框. 在项目当中集成了推送功能,当手机接收到消息后只是在手机通知栏有提示信息.所以需要展示像微信信息弹出框一样的效果,开始自己还以为微信信息弹出框是自定义Dialog之类的自定 ...

  2. Android 8.0+通知栏(Notification)适配详解,判断通知权限是否打开,并跳转至通知管理页面

    前不久因为API26(Android 8.0)以上的设备无法显示通知栏,所以网上查阅了比较多了资料,得出结论,API26以后引入了通知渠道这么个东西,然后就写了一篇问题对应的博文:Android 8. ...

  3. Android开发之通知栏Notification详解

    Notification的用法  --- 状态栏通知  发送一个状态栏通知必须的两个类:            1. NotificationManager   --- 状态栏通知的管理类,负责发通知 ...

  4. Android发送通知——通知栏(Notification)

    Android发送通知--通知栏(Notification) 通知是指 Android 在您应用的界面之外显示的消息,旨在向用户提供提醒.来自他人的通信信息或您应用中的其他实时信息.在发出一条通知后, ...

  5. AndroidO Notification横幅通知(HangUp Notification)

    文章目录 1. 配置 1.1 环境 1.2 参考博客 2. 上代码 2.1 逻辑代码 2.2 权限代码 1. 配置 1.1 环境 环境:// 2020-12-08 AndroidO (8以上) And ...

  6. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序   在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, ...

  7. android 8.0的imei简书,Android 8.0通知栏渠道,渠道组的适配和使用

    Android 8.0通知栏渠道,渠道组的适配和使用 推广一下 博客 android 8.0开始引入了渠道组的概念,app可以对通知类型进行细分,比如划分为:广告消息,私聊消息,群聊消息等. 但其实到 ...

  8. 四十一、Android Notification通知详解

    根据activity的生命周期,在activity不显示时,会执行onStop函数(比如按下home键),所以你在onStop函数(按退出键除外)里面把notification放在通知栏里,再此显示时 ...

  9. android Notification的使用

    今天,简单讲讲android里如何使Notification. 之前,我讲如何使用服务器进行版本升级时提到了Notification.这个其实我并不常用,所以当时看代码时也是查找了资料,这个很多地方还 ...

  10. Android Notification总结

    Android Notification总结 目录[-] 一.通知的主要功能 二.通知简介 三.通知的使用流程 四.使用NotificationCompat.Builder设置通知的属性: 五.管 ...

最新文章

  1. PHP监控linux服务器负载
  2. jmeter的性能监控框架搭建记录(Influxdb+Grafana+Jmeter)
  3. 数论考试题(b) 求约数的约数的最大个数
  4. -------------------开启我的手残之旅---------我就是喜欢写笔记-------咋滴啦?-----
  5. java开发crm遇到的难点_CRM 2011 开发中遇到的问题小结
  6. [转载] [python3教程]第七章.输入输出(Input and Output)
  7. maven的使用--初级篇
  8. 2020年ACM算法竞赛夏季短学期 任务安排
  9. CAD图纸可以约束转换后图纸格式的大小吗?
  10. python输出内容到终端的函数_如何通过Python函数运行的可执行文件的终端输出以一般方式静音?...
  11. mysql commit用法_sql commit用法
  12. 从小学到大学到出社会以后我的感受(出社会时间不长)
  13. IKBC W200 键盘 win 键失效
  14. 软件架构模式 mark Richards - 读后总结 1 - 分层架构
  15. ADC0809芯片简介
  16. 招商银行证书到期后不同机器恢复导致的问题——“用户密码、证件号码和证书错误#3”
  17. css实现文字或者div盒子水平垂直居中的方法
  18. 手用计算机怎么弄声音,手把手教你电脑声音太小怎么处理
  19. [弱校联萌2016]2016弱校联盟十一专场10.3
  20. 机翻《C-CAM: Causal CAM for Weakly Supervised Semantic Segmentation onMedical Image 》

热门文章

  1. 专家说法:安防与隐私之间如何权衡?
  2. 银河麒麟系统Arm64 编译Gdal
  3. 3. Linux系统启动分析-从start_kernel到init进程的启动
  4. TI官网的WEBENCH的使用
  5. Java水仙花三种方法
  6. 共享wifi 软件 linux,Linux Wifi共享上网脚本,类似WIN 7的Connectify工具
  7. VR虚拟展厅:引领全景线上企业展馆三维新模式
  8. java毕业设计宠物爱心救助系统Mybatis+系统+数据库+调试部署
  9. java中String s=abc及String s=new String(abc)的区别
  10. 腾讯云服务器如何开通8888端口(宝塔面板)