Android通知---创建通知(附加代码)

1. 创建基本通知

(1)  创建基本通知


NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channel_id").setSmallIcon(R.drawable.notification_icon) .setContentTitle("textTitle")                 .setContentText("textContent")                .setPriority(NotificationCompat.PRIORITY_DEFAULT);  //设置通知重要性,支持 Android 7.1 及更低版本,

使用 NotificationCompat.Builder 对象设置通知的内容和渠道。以下示例展示了如何创建包含以下内容的通知:

  • 小图标,通过 setSmallIcon() 设置。这是所必需的唯一用户可见内容。

  • 标题,通过 setContentTitle() 设置。

  • 正文文本,通过 setContentText() 设置。

  • 通知优先级,通过 ​​​​​​​setPriority() 设置。优先级决定了通知在 Android 7.1 及更低版本上的干扰程度。对于 Android 8.0 及更高版本,请改为设置渠道重要性,如下一部分所示。

NotificationCompat.Builder 构造函数要求您提供渠道 ID。这是与 Android 8.0(API 级别 26)及更高版本兼容所必需的,但被早期版本忽略。

默认情况下,通知的文字内容会被截断以放在一行。您可以通过创建展开式通知显示更多信息。

图 1. 处于收起和展开状态的展开式通知

如果想要更长的通知,可以使用 setStyle()  添加样式模板,以启用可展开的通知。后面会介绍.

(2) 创建渠道并设置重要性

      先将 NotificationChannel 的实例传递给  createNotificationChannel(),在系统中注册应用的通知渠道,然后才能在 Android 8.0 及更高版本上发送通知.

NotificationChannel 构造函数需要一个 importance,它使用 NotificationManager 类中的一个常量。此参数确定对于属于此渠道的任何通知,如何干扰用户。将优先级设置为 setPriority(),以支持 Android 7.1 及更低版本,如上例所示。

private void createNotificationChannel() {// Android 8.0 及更高版本上发送通知,需要创建NotificationChannelif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {int importance = NotificationManager.IMPORTANCE_DEFAULT;//设置通知重要性,针对Android 8.0 及更高版本上; 用setPriority()以支持 Android 7.1 及更低版本,NotificationChannel channel = new NotificationChannel("channel_id", "channel_name", importance);channel.setDescription("channel_description");// 向系统注册通知渠道,此后您无法更改重要性或其他通知行为。NotificationManager notificationManager = getSystemService(NotificationManager.class);notificationManager.createNotificationChannel(channel);}
}

(3) 设置通知的点按操作

     如需显示通知,请调用 NotificaitonManagerCompat.notify() , 并向其传递通知的唯一 ID 和 NotificationCompat.Builder.build() 的结果。具体可见以下示例:

int NOTIFICATION_ID = 10 ; //唯一标识该通知,在更新和清除通知时需要notificationManager.notify(NOTIFICATION_ID, builder.build());

注意: 从 Android 8.1(API 级别 27)开始,应用每秒最多只能发出一次通知提示音。如果应用在一秒内发布了多条通知,这些通知都会按预期显示,但每秒中只有第一条通知会发出声音。

2 . 创建大文本通知 : BigTextStyle

 void createBigTextStyleNotification() {Intent intent = new Intent(this, MainActivity1.class);PendingIntent pendingIntent =  PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_MUTABLE);NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channel_id").setSmallIcon(R.drawable.notification_icon) .setContentTitle("BigTextStyle")                .setContentText("hi i am big text style notification")               .setContentIntent(pendingIntent);//设置 BigTextStyle .setStyle(new NotificationCompat.BigTextStyle().bigText("Much longer text that cannot fit one line...") //设置需要显示的内容.setBigContentTitle("通知列表中,通知展开后,显示的标题") ).setPriority(NotificationCompat.PRIORITY_DEFAULT);NotificationManager notificationManager = (NotificationManager.class);NotificationChannel channel = new NotificationChannel("11", "channel-name", NotificationManager.IMPORTANCE_DEFAULT);notificationManager.createNotificationChannel(channel);notificationManager.notify(11, builder.build());}

3 . 创建大图片通知 : BigpictureStyle

 void createBigPictureStyleNotification() {Intent intent = new Intent(this, MainActivity1.class);PendingIntent pendingIntent =  PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_MUTABLE);NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channel_id").setSmallIcon(R.drawable.notification_icon) .setContentTitle("BigPictureStyle")                .setContentText("hi i am big picture style notification")               .setContentIntent(pendingIntent);//设置 BigPictureStyle.setStyle(new NotificationCompat.BigPictureStyle()  .bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.pictiure))  //设置需要展示的图片.setBigContentTitle("通知列表中,通知展开后,显示的标题") ).setPriority(NotificationCompat.PRIORITY_DEFAULT);NotificationManager notificationManager = (NotificationManager.class);NotificationChannel channel = new NotificationChannel("11", "channel-name", NotificationManager.IMPORTANCE_DEFAULT);notificationManager.createNotificationChannel(channel);notificationManager.notify(11, builder.build());}

4 . 创建带操作按钮的通知 

        通知最多可以提供三个操作按钮,以便用户快速响应,例如暂停提醒或回复短信。但这些操作按钮不能重复用户在 点按通知 时执行的操作。添加操作按钮,通过 addAction() 添加按钮的动作. 下面例子中,设定第一个Button的name="确定",点击后跳转到MainActivity1; 设定第二个Button的name="取消",点击后跳转到MainActivity2;

 void createActionNotification() {Intent intent1 = new Intent(MainActivity.this, MainActivity1.class);Intent intent2 = new Intent(MainActivity.this, MainActivity2.class);PendingIntent PendingIntent1 = PendingIntent.getActivity(MainActivity.this, 0, intent1, PendingIntent.FLAG_MUTABLE);PendingIntent PendingIntent2 = PendingIntent.getActivity(MainActivity.this, 0, intent2, PendingIntent.FLAG_MUTABLE);NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channel_id").setSmallIcon(R.drawable.notification_icon) .setContentTitle("Action Notification")                .setContentText("hi i am action notification")  .setColorized(true).setColor(Color.RED) //设置颜色.setSubText("重要提醒") //设置 通知显示的一些附加信息          .addAction(R.mipmap.ic_launcher_round, "确定", PendingIntent1) //添加第一个按钮.addAction(R.mipmap.ic_launcher_round, "取消", PendingIntent2) //添加第二个按钮.setPriority(NotificationCompat.PRIORITY_DEFAULT);NotificationManager notificationManager = (NotificationManager.class);NotificationChannel channel = new NotificationChannel("11", "channel-name", NotificationManager.IMPORTANCE_DEFAULT);notificationManager.createNotificationChannel(channel);notificationManager.notify(11, builder.build());}

效果如下:

注意 :在 Android 10(API 级别 29)及更高版本中,如果应用不提供自己的通知操作按钮,平台会自动生成通知操作按钮。如果您不希望应用通知显示任何建议的回复或操作,可以使用 setAllowGeneratedRepies() 和 setAllowSystemGneratedContextualActions() 选择停用系统生成的回复和操作。

5. 创建带直接回复的通知 

        Android 7.0(API 级别 24)中引入的直接回复操作,可在通知中输入文本。然后,文本会传递给应用,而不会打开 activity。例如,您可以使用直接回复操作,让用户从通知中回复短信.

 void createResultNotification() {//1.定义回复的操作Intent replyIntent = new Intent();replyIntent.setAction("reply"); //定义广播的ActionreplyIntent.setClass(MainActivity.this, NotificationReceiver.class);//如需要接收广播,请自行实现NotificationReceiver.classPendingIntent replyPendingIntent = PendingIntent.getBroadcast(MainActivity.this, (int) SystemClock.uptimeMillis(), replyIntent, PendingIntent.FLAG_MUTABLE);//2.默认的回复内容,可以不设置CharSequence[] choices = {"A.参加", "B.不参加", "C.需要考虑,晚间再回复"}; //3.添加回复按钮RemoteInput remoteInput = new RemoteInput.Builder("key_text_reply") //key_text_reply是唯一标识该回复按钮.setLabel("请输入回复的内容")  //输入框的提示文字.setChoices(choices).setEditChoicesBeforeSending(RemoteInput.EDIT_CHOICES_BEFORE_SENDING_DISABLED)//设置是否能编辑默认的回复内容 .build();//4.创建回复操作并添加远程输入NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.icon, "快速回复", replyPendingIntent) //输入编辑框的入口,点击该按钮后,便可编辑回复的内容,按钮的text="快速回复",有些手机定制化原因,可能会不显示,如下面例子.addRemoteInput(remoteInput) //添加远程输入.setAllowGeneratedReplies(false).build();NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channel_id").setSmallIcon(R.drawable.notification_icon) .setContentTitle("聚餐通知")                .setContentText("请问今晚您会参加聚餐活动吗?")  .setColorized(true).setColor(Color.BLUE) //设置颜色.setSubText("工作通知") //设置 通知显示的一些附加信息          .addAction(action).setPriority(NotificationCompat.PRIORITY_DEFAULT);NotificationManager notificationManager = (NotificationManager.class);NotificationChannel channel = new NotificationChannel("11", "channel-name", NotificationManager.IMPORTANCE_DEFAULT);notificationManager.createNotificationChannel(channel);notificationManager.notify(11, builder.build());}

当用户触发通知操作时,系统会提示用户输入回复,效果如下图:

(1) 从回复中检索用户输入

        如需从通知的回复界面接收用户输入,调用 RemoteInput.getResultsFromIntent(), 在广播的onReceive() 中处理新通知.

private CharSequence getMessageText(Intent intent) {Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);if (remoteInput != null) {return remoteInput.getCharSequence(KEY_TEXT_REPLY); //获取远程输入的内容}return null;}

KEY_TEXT_REPLY 是在上一图中3.添加回复按钮RemoteInput 中定义的.

6. 创建带进度条的通知 

通知可以包含动画形式的进度指示器,向用户显示正在进行的操作的状态。如下所示:

        通过setProgress( int max, int progress, boolean false) ,操作在任何时间的完成进度,其中第一个参数是设置进度条的最大值(如100),默认为0; 第二个参数是当前的进度值。最后一个是否在通知中显示通知进度值。其中,通过在后台不断调用setProgress( int max, int progress, boolean false),将更新的progress当前值更新到通知中.

 void createProgressNotification() {int PROGRESS_MAX = 100; //最大值
int PROGRESS_CURRENT = 0; //当前值NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channel_id").setSmallIcon(R.drawable.notification_icon) .setContentTitle("Picture Download")                .setContentText("Download in progress")               .setPriority(NotificationCompat.PRIORITY_LOW).setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.icon)) //设置大图片.setProgress(PROGRESS_MAX, PROGRESS_CURRENT, false); // 设置进度, false:显示进度NotificationManager notificationManager = (NotificationManager.class);NotificationChannel channel = new NotificationChannel("11", "channel-name", NotificationManager.IMPORTANCE_DEFAULT);notificationManager.createNotificationChannel(channel);notificationManager.notify(11, builder.build());//模拟后台更新进度new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < PROGRESS_MAX ; i++) {  // builder.setProgress(PROGRESS_MAX ,i,false);notificationManager.notify(15,builder.build());builder.setContentText("下载中..."+i+"%");try {Thread.sleep(50);}catch (InterruptedException e){e.printStackTrace();}}//当前进度值到达 PROGRESS_MAX=100 后,重新设置通知的标题和内容builder.setContentTitle("start install!!").setContentText("installing.....").setProgress(0,0,true); //移除进度条notificationManager.notify(15,builder.build());try {//清除通知Thread.sleep(4000);notificationManager.cancel(15);}catch (InterruptedException e){e.printStackTrace();}}}).start();}

      操作结束时,当前进度 progress 必须等于设定的最大值 max。当完成进度时,可以通过 setProgress(0,0,false) 来移除进度条.

      如需显示不定的进度条(不指示完成百分比的进度条),调用 setProgress(0, 0, true)。器。

显示进度的效果如下所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/611241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu查看内存使用情况命令

命令简介 在Ubuntu系统中&#xff0c;可以使用终端命令来查看电脑的内存使用情况。打开终端并输入以下命令&#xff1a; free -h 该命令可用于查看系统中内存的总量、已使用的内存、空闲的内存及缓冲区使用的内存。其中“-h”选项用于以人类可读的格式显示内存大小。执行该命…

YOLOv8-Seg改进:轻量化改进 | 超越RepVGG!浙大阿里提出OREPA:在线卷积重参数化

🚀🚀🚀本文改进:OREPA在线卷积重参数化巧妙的和YOLOV8结合,并实现轻量化 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何训练YOLOv8-seg; 2)模型创新,提升分割性能; 3)独家…

虽迟但到!MySQL 可以用 JavaScript 写存储过程了!

任何能用 JavaScript 来干的事情&#xff0c;最终都会用 JavaScript 来干 背景 不久前&#xff0c;Oracle 在 MySQL 官方博客官宣了在 MySQL 中支持用 JavaScript 来写存储过程。 最流行的编程语言 最流行的数据库。程序员不做选择&#xff0c;当然是全都要。 使用方法 用 J…

Docker部署情侣恋爱网站

个人名片&#xff1a; 对人间的热爱与歌颂&#xff0c;可抵岁月冗长&#x1f31e; 个人主页&#x1f468;&#x1f3fb;‍&#x1f4bb;&#xff1a;念舒_C.ying 个人博客&#x1f30f; &#xff1a;念舒_C.ying 情侣恋爱网站 1. 修改代码2. 目录结构3. 编写Dockerfile4. 编写d…

基于ssm的物流信息管理系统论文

摘 要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&#xff0c;让整个世界都可以即时通话…

车速预测 | Matlab基于RBF径向基神经网络的车速预测模型(多步预测,尾巴图)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 车速预测 | Matlab基于RBF径向基神经网络的车速预测模型&#xff08;多步预测&#xff0c;尾巴图&#xff09; 程序设计 完整程序和数据获取方式&#xff1a;私信博主回复Matlab基于RBF径向基神经网络的车速预测模型…

软件测试|MySQL中的GROUP BY分组查询,你会了吗?

MySQL中的GROUP BY分组查询&#xff1a;详解与示例 在MySQL数据库中&#xff0c;GROUP BY语句用于将数据按照指定的列进行分组&#xff0c;并对每个分组执行聚合函数操作。这就是的我们可以在查询中汇总数据并生成有意义的结果。本文将深入介绍MySQL中的GROUP BY语句&#xff…

2023年度总结:但行前路,不负韶华

​ &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x…

k8s部署mongodb-sharded7.X集群(多副本集)

#mongodb-sharded 7.X版本CHART NAME: mongodb-sharded CHART VERSION: 7.0.5 APP VERSION: 7.0.2helm repo add bitnami https://charts.bitnami.com/bitnami helm pull bitnami/bitnami/mongodb-sharded --untar默认副本数较多。我修改为33 搜索关键字replicaCount 修改 最后…

盖子的c++小课堂——第二十四讲:差分数组

前言 嗨嗨嗨&#xff0c;这里是盖子的小课堂哟&#xff0c;这次更新主要是因为快放假了&#xff0c;时间多了&#xff0c;好嘞&#xff0c;废话不多说&#xff0c;点赞评论拿来吧你~ 差分数组 一维差分数组 假设给你一个数组 nums &#xff0c;先对区间 [a,b] 中每个元素加…

WPF真入门教程26--项目案例--欧姆龙PLC通讯工具

1、案例介绍 前面已经完成了25篇的文章介绍&#xff0c;概括起来就是从0开始&#xff0c;一步步熟悉了wpf的概念&#xff0c;UI布局控件&#xff0c;资源样式文件的使用&#xff0c;MVVM模式介绍&#xff0c;命令Command等内容&#xff0c;这节来完成一个实际的项目开发&#…

从0开始学Git指令(2)

从0开始学Git指令 因为网上的git文章优劣难评&#xff0c;大部分没有实操展示&#xff0c;所以打算自己从头整理一份完整的git实战教程&#xff0c;希望对大家能够起到帮助&#xff01; 工作区&#xff08;Working Directory&#xff09; 就是你在电脑里能看到的目录&#x…

性能分析与调优: Linux 使用 iperf3 进行TCP网络吞吐量测试

目录 一、实验 1.环境 2.TCP网络吞吐量的微观基准测试 二、问题 1.iperf参数有哪些 2.iperf如何二进制安装 一、实验 1.环境 &#xff08;1&#xff09;主机 表1-1 主机 主机架构组件IP备注prometheus 监测 系统 prometheus、node_exporter 192.168.204.18grafana监测…

dotdotdot插件快速实现多行文本的省略

jQuery.dotdotdot 前言 在“css新增文本样式&#xff08;完整&#xff09;”这篇&#xff0c;我们介绍了text-overflow属性省略多余的文本。用text-overflow属性可以直接省略单行文本&#xff0c;但省略多行文本&#xff0c;单独使用CSS是无法实现&#xff0c;今天我们介绍一…

RabbitMQ高级

文章目录 一.消息可靠性1.生产者消息确认2.消息持久化3.消费者确认4.消费者失败重试 MQ的一些常见问题 1.消息可靠性问题:如何确保发送的消息至少被消费一次 2.延迟消息问题:如何实现消息的延迟投递 3.高可用问题:如何避免单点的MQ故障而导致的不可用问题 4.消息堆积问题:如…

了解不同方式导入导出的速度之快

目录 一、用工具导出导入 Navicat&#xff08;速度慢&#xff09; 1.1、导入&#xff1a; 共耗时&#xff1a; 1.2、导出表 共耗时&#xff1a; 二、用命令语句导出导入 2.1、mysqldump速度快 导出表数据和表结构 共耗时&#xff1a; 只导出表结构 导入 共耗时&…

【前沿技术杂谈:ChatGPT】ChatGPT——热潮背后的反思

【前沿技术杂谈&#xff1a;ChatGPT】ChatGPT——热潮背后的反思 缘起&#xff1a;无中生有&#xff0c;涅槃重生人工智能技术人工智能的发展史无中生有内容自动生成技术的发展代表企业OpenAI-GPT系列技术的发展历程ChatGPT新特点 热潮&#xff1a;万众瞩目&#xff0c;群雄逐鹿…

Super关键字

与this关键字用法相同&#xff0c;但super关键字指的是父类的对象 我们常用super.来调用父类对象的属性或者方法 super关键字出来调用父亲的属性还可以调用父亲的方法&#xff0c;方式也是super. super() super()表示调用父类的无参构造 super(参数列表)表示调用父类的有参…

Java中的网络编程

文章目录 网络基础知识IP 地址端口协议 Java 中网络编程InetAddress&#xff08;静态类&#xff09;UDP 通信原理UDP 发送数据步骤UDP 接收数据步骤UDP 发送接收案例 TCP 通信原理TCP 发送数据步骤TCP 接收数据步骤TCP 发送接收案例 网络基础知识 概述&#xff1a;在网络通信协…

认识Linux指令之与时间相关的指令

01.date命令 date 指定格式显示时间&#xff1a; date %Y:%m:%d date 用法&#xff1a;date [OPTION]... [FORMAT] 1.在显示方面 在显示方面&#xff0c;使用者可以设定欲显示的格式&#xff0c;格式设定为一个加号后接数个标记&#xff0c;其中常用的标记列表如下 %H : …