Notification-通知

article/2025/9/11 20:49:07

Notification-通知

通知是一种消息,这种消息呈现在应用UI之外,通过通知可以对用户进行提醒、可以和其他用户收发信息等。通过点击通知,可以唤起app页面或者直接在通知上执行一些操作。下面介绍通知的一些常用用法。

展示一条普通通知

先来看一个效果:image.png

从这张截图上,可以看到有一条通知消息,如果要实现这个效果,参考以下实现逻辑:

private static final String CHANNEL_ID_1 = "CHANNEL_ID_1";public void doNotify(View v) {NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {NotificationChannel channel = new NotificationChannel(CHANNEL_ID_1, CHANNEL_NAME_1, NotificationManager.IMPORTANCE_DEFAULT);notificationManagerCompat.createNotificationChannel(channel);}final String content = "独行侠大胜太阳拖入“抢七” 热火击败76人挺进东决";NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID_1);builder.setSmallIcon(android.R.drawable.ic_dialog_alert).setContentTitle("通知标题").setContentText(content).setPriority(NotificationCompat.PRIORITY_DEFAULT);final int notificationId = 101;notificationManagerCompat.notify(notificationId, builder.build());
}

这里有几点需要说明:

  1. NotificationManagerCompat是对NotificationManager进行了版本差异化的封装,本质为(NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
  2. Android 8.0开始,发送任何通知前,都要先创建通知通道NotificationChannel;创建一个已存在的通知通道会被忽略,因此重复创建通知通道是安全;官方推荐是app启动时创建通道;
    创建通知通道NotificationChannel的参数需要注意2点:
    • channelId包内唯一;
    • important参数,不同级别对用户的提醒方式和打扰程度不同如声音等,详情可以参考NotificationManager中IMPORTANCE_*说明,这里使用默认important;
  3. 创建单个通知渠道notificationManagerCompat.createNotificationChannel(channel)实际执行了mNotificationManager.createNotificationChannel(channel)(除了提供创建单个通知渠道外,内部还提供了创建多个通知渠道的重载方法:public void createNotificationChannels(@NonNull List<NotificationChannel> channels));
  4. NotificationCompat.Builder: NotificationCompatNotification进行了版本差异化封装,采用建造者模式创建Notification;
    • builder.setSmallIcon(R.mipmap.ic_launcher): 设置通知小图标,这是一条通知的必须元素!
    • setPriority(NotificationCompat.PRIORITY_DEFAULT): 7.1及以下版本,通过此方法设置通知权重,即打扰用户程度;8.0及以上版本,需要用NotificationChannel来设置相关属性。
  5. notificationManagerCompat.notify(notificationId, builder.build()): 注意notificationId必须唯一,之后可对该通知进行更新,如下载进度更新;

这是一条最简单的通知,还没有给通知添加用户行为,下面对其增加点击交互。

通知点击交互

先看效果

untitled.gif

从图上可以看到,A页面只有一个发送通知的按钮,而在成功发送通知并点击通知后,A页面展示了通知上的内容,通知也随即消失。要实现这个功能,只需要改造上一节的实例代码如下:

  1. AndroidManifest.xml修改启动模式:android:launchMode="singleTop";

  2. doNotify()方法调整:

    public void doNotify(View v) {NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {NotificationChannel channel = new NotificationChannel(CHANNEL_ID_1, CHANNEL_NAME_1, NotificationManager.IMPORTANCE_DEFAULT);notificationManagerCompat.createNotificationChannel(channel);}final String content = "独行侠大胜太阳拖入“抢七” 热火击败76人挺进东决";Intent intent = new Intent(this, NotificationActivity.class);intent.putExtra("content", content);PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID_1);builder.setSmallIcon(R.mipmap.ic_launcher).setContentTitle("通知标题").setContentIntent(pendingIntent).setContentText(content).setPriority(NotificationCompat.PRIORITY_DEFAULT).setAutoCancel(true);final int notificationId = 101;notificationManagerCompat.notify(notificationId, builder.build());
    }
    

    这里有几点需要说明:

    • PendingIntent: 将Intent封装为PendingIntent, 并且标记设置flagsPendingIntent.FLAG_UPDATE_CURRENT用以设置Intent中的额外参数;
    • 如果将flags设置为PendingIntent.FLAG_IMMUTABLE,则intent中的附加参数将不会生效;
  3. Activity中增加onNewIntent()回调逻辑:

    protected void onNewIntent(Intent intent) {super.onNewIntent(intent);if (intent.hasExtra("content")) {((TextView) findViewById(R.id.tv_notification_content)).setText(intent.getStringExtra("content"));}
    }
    

    上面的例子中,可以发现消息内容被截取成了单行显示,接下来展示如何显示完整的消息。

可收起和展开的消息

文本消息:

看效果

Screenshot_1652103479.png Screenshot_1652103483.png

要实现可展开收起的消息比较简单,在上述代码基础上添加一行代码即可setStyle(new NotificationCompat.BigTextStyle().bigText(content))

...NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID_1);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), android.R.drawable.star_big_on);
builder.setSmallIcon(android.R.drawable.stat_notify_chat).setLargeIcon(bitmap).setContentTitle("通知标题").setContentText(content).setStyle(new NotificationCompat.BigTextStyle().bigText(content)).setPriority(NotificationCompat.PRIORITY_DEFAULT).setContentIntent(pendingIntent).setAutoCancel(true);final int notificationId = 101;
notificationManagerCompat.notify(notificationId, builder.build());
...

这里还增加了setLargeIcon(bitmap)来设置通知的大图标。

图片通知

类似的还可以设置一张可收起展开的图片通知,设置style:setStyle(new NotificationCompat.BigPictureStyle().bigLargeIcon(null).bigPicture(bitmap))

Screenshot_1652103750.png

以上就是通知的常用场景,当然通知还有一些高级用法,比如和前台服务结合的下载进度条、媒体控制等。


http://chatgpt.dhexx.cn/article/dsx2pEeO.shtml

相关文章

全面解析Notification

Notification在Android中使用的频率可以说是非常高的,本篇博客,我将围绕着Notification的各方面进行解析,使大家对Notification有更好的认识。 Notification的使用步骤 1.获取NotificationManager NotificationManager mNotificationManager = (NotificationManager) get…

Android Notification使用

Android 通知栏适配 前言正文一、Android中通知的变化1. Android 4.1&#xff0c;API 162. Android 4.4&#xff0c;API 19 和 203. Android 5.0&#xff0c;API 214. Android 7.0&#xff0c;API 245. Android 8.0&#xff0c;API 266. Android 12.0&#xff0c;API 31 二、创…

Android之Notification的多种用法

我们在用手机的时候&#xff0c;如果来了短信&#xff0c;而我们没有点击查看的话&#xff0c;是不是在手机的最上边的状态栏里有一个短信的小图标提示啊&#xff1f;你是不是也想实现这种功能呢&#xff1f;今天的Notification就是解决这个问题的。 我们也知道Android系统也是…

Android--通知之Notification

前言 之前一篇博客讲了Android下使用Toast的方式提示消息。这篇博客讲解一下在Android中使用Notification提示消息给用户&#xff0c;Notification是一种具有全局效果的通知&#xff0c;程序一般通过NotificationManager服务来发送Notification。在本篇博客中&#xff0c;将介绍…

Android通知Notification使用全解析,看这篇就够了

1、效果 2、简介 通知是 Android 在您的应用 UI 之外显示的消息&#xff0c;用于向用户提供提醒、来自其他人的通信或来自您的应用的其他及时信息。用户可以点击通知打开您的应用或直接从通知中执行操作。 2.1、展示 通知以不同的位置和格式向用户显示&#xff0c;例如状态栏…

php cacti,cacti搭建遇到的那些事

最近闲的无聊&#xff0c;亲手操刀了一把整个生产环境cacti的搭建&#xff0c;时间消耗了3-4天&#xff0c;这里主要感谢网友老李、不想扮演逃兵、jiam的指导和帮助。下面就说说我搭建这个遇到的一些棘手的问题吧&#xff01; 搭建完成的界面如下图&#xff1a; 系统环境&#…

cacti mysql_cacti监控mysql

1.MySQL stats模板 功能&#xff1a;用来监控MySQL状态&#xff0c;其中包括索引使用情况、查询、排序、锁定情况等。 1).将mysql_stats.php 和 dumpMemcachedStats.php脚本放到cacti脚本目录下(/usr/local/apache/htdocs/cacti/.s/)&#xff0c;导入模板时注意选择cacti_host_…

cacti mysql 详解,cacti详解和基本配置

cacti简介&#xff1a; cacti是用php语言实现的一个软件&#xff0c;它的主要功能是用snmp服务获取数据&#xff0c;然后用rrdtool存储和更新数据&#xff0c;当用户需要查看数据的时候就用rrdtool生成图表呈现给用户。snmp抓到的数据不是存储在mysql中&#xff0c;而是存在rrd…

cacti安装

1、搭建LNMP环境 http://blog.csdn.net/yang_xu_1987/article/details/77292340 #下面是按照源码搭建LNMP的方式&#xff0c;主要是路径不一样 2、安装rrd-tool、snmp相关包 yum install -y rrdtool net-snmp net-snmp-utils 3、安装cacti 下载cacti&#xff1a;http://down…

java cacti_开源的企业级监控系统 Cacti 简介

Cacti是一款网络流量监测图形分析工具&#xff0c;把LAMP的功能都结合起来&#xff0c;用于网络流量监控&#xff0c;操作起来非常方便&#xff01;让我们认识下Cacti简介及工作流程。 一、Cacti简介 1. cacti是用php语言实现的一个软件&#xff0c;它的主要功能是用snmp服务获…

安装cacti

1、搭建LAMP环境 yum -y install httpd mariadb mariadb-server mariadb-devel php php-mysql php-gd php-pear gd gd-devel systemctl start httpd && systemctl enable httpd systemctl start mariadb && systemctl enable mariadb 2、安装绘图工具和SNMP组…

Cacti安装及模板导入

文章目录 前言简介安装安装http以及php及php相关扩展安装数据库mariadb&#xff0c;配置yum源&#xff1a;安装snmp及其相关扩展&#xff08;注意版本号得一致&#xff09;安装绘图工具RRDTool绘图工具安装spine安装中文字体安装cacti初始化cacti 应用管理设备以及创建图形加入…

搭建cacti

1、搭建lamp环境 yum -y install httpd mariadb mariadb-server mariadb-devel php php-mysql php-gd php-pear gd gd-devel systemctl start httpd && systemctl enable httpd systemctl start mariadb && systemctl enable mariadb 2、安装绘图工具和snmp组件…

cacti php zombie,cacti 监控搭建

一、准备前工作 1.系统&#xff1a;centos 7.6 关闭seliunx及防火墙 关闭防火墙 systemctl disable firewalld.service #禁止firewall开机启动 关闭SELINUX setenforce 0 或 vim /etc/selinux/config 修改 SELINUXenforcing 改成 SELINUXdisabled 3.更新yum源 这个不再叙述 4.安…

java cacti_cacti监控安装

cacti是用PHP实现的一个软件&#xff0c;它用snmp服务获取数据&#xff0c;然后用rrdtool存储和更新数据&#xff0c;并生成图表展示。比较适合用于交换机、路由器的网络监控&#xff0c;插件众多&#xff0c;可图示化显示网络状况。 cacti官方推荐版本如下&#xff1a; PHP 5.…

mysql cacti_使用Cacti监控MySQL

本文将概述一些自己在使用中的问题(并不会给出step by step的使用介绍)&#xff0c;以供参考&#xff0c;详细信息请留言。 既然别人的轮子已经很好用了&#xff0c;我自己就不发明了。使用Cacti可以较为快速搭建一个MySQL性能监控平台&#xff1a; Cacti是一个用于监控网络流量…

linux cacti 搭建,Cacti搭建部署

一、搭建lamp或者lnmp环境。 1、推荐使用:http://lnmp.org/一键安装lamp环境即可。 2、修改php配置:#vim /usr/local/php/etc/php.ini 取消305行注释 二、配置cacti#cd /usr/local/src #wget http://www.cacti.net/downloads/cacti-0.8.8h.tar.gz #tar zxvf cacti-0.8.8h.tar…

cacti监控

cacti监控 一、 使用RPM包配置LANP 1、 安装并配置apache、mariadb 1&#xff09; 安装apache和mariadb数据库 [rootcentos01 ~]# rm -rf /etc/yum.repos.d/CentOS-* [rootcentos01 ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护&#xff0c;将以只读方式挂载 [rootcent…

cacti

cacti 题目一、安装 cacti二、访问Cacti Web界面三、客户端配置SNMP1.安装SNMP2.编辑配置文件四、在服务器添加监听SNMP提示:如果需要全套视频以及笔记请私信我,视频可能需要额外收点费用。 题目 Cacti 安装 cacti; 在 storagesrv 上配置 snmp,用于监控服务器接口流量情况…

Linux 监控工具之Cacti使用详解(一)

大纲 一、前言 二、Cacti 概述 三、Cacti 工作流程 四、Cacti 安装 五、配置Cacti监控本机 注,操作系统 CentOS 6.4 x86_84,软件版本 Cacti-0.8.8b 目前最新版。 (说明:本博文的一些图片自于开源社区与官方网站并不是所有内容全是原创) 一、前言 在前面的几篇博客中我们讲…