Android 通知

通知

通知是指 Android 在应用界面之外显示的消息,旨在向用户提供提醒、来自他人的通信或应用中的其他实时信息。用户可以点按通知以打开您的应用,或直接从通知中执行操作。
通知在状态栏中显示为图标,在抽屉式通知栏中显示更详细的条目,并在应用图标上显示一个标志。通知还会显示在配对的穿戴式设备上。
在这里插入图片描述

基本用法

需要在清单文件中配置通知权限

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

1. 创建通知渠道

从 Android 8.0(API 级别 26)开始,所有通知都必须分配到一个渠道。

	// 获取 NotificationManager 对象来管理通知
	NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
	
	if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
			NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
                    "meMusic message", NotificationManager.IMPORTANCE_HIGH);
            manager.createNotificationChannel(channel);  //注册通知渠道
	}

public NotificationChannel(String id, CharSequence name, @Importance int importance)
需要创建一个NotificationChannel对象,第一个id是唯一渠道 ID,第二个name是用户可见名称,可以自定义,第三个importance是通知重要程度,它是NotificationManager 中定义的常量属性值,主要有以下五个:

  • IMPORTANCE_NONE 无。关闭通知
  • IMPORTANCE_MIN 小。开启通知,不会弹出,没有提示音,状态栏中不显示
  • IMPORTANCE_LOW 低。开启通知,不会弹出,没有提示音,但状态栏中显示
  • IMPORTANCE_DEFAULT 默认。开启通知,不会弹出,但有提示音,状态栏中显示
  • IMPORTANCE_HIGH 高。开启通知,会弹出,发出提示音,状态栏中显示

2. 创建通知

创建通知时需要用到NotificationManager 和 NotificationCompat 两个类。NotificationManager是状态栏通知的管理类,负责发通知,清除通知等操作。NotificationCompat可以兼容不同版本的 Notification。

        // 1.获取 NotificationManager 对象来管理通知
        NotificationManager manager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        // 2.通过NotificationCompat对象的构造器类来设置通知栏的属性
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNAL_ID)
                .setContentTitle("这是通知标题")
                .setContentText("这是通知内容")
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.mipmap.ic_launcher)
                .setPriority(NotificationCompat.PRIORITY_MAX)
                .setLargeIcon(BitmapFactory.decodeResource(this.getResources(), R.mipmap.ic_launcher));
        // 3.创建notification对象
        Notification notification = builder.build();
        // 4.发送/更新通知内容
        manager.notify(1888,notification); //1888为自定义通知唯一id

3. 更新通知

builder.setContentText("来新的消息了");
manager.notify(1888,notification);

4. 设置点击事件

设置通知的点击事件需要用PendingIntent的类,它和Intent一样,都能够执行某些动作,包括启动活动、服务,或发送广播等。 但它有和Intent也有些不同之处:Intent倾向于立即去执行某个动作,而PengdingIntent更倾向于在某个合适的时机去执行某个动作,即延迟执行Intent。
一般通过PendingIntent类的getActivity()、getBroadcast()或getService()其中一个方法获取实例。

//获取 PendingIntent 对象,意图是点击通知后打开应用主页面
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
...
// 通过NotificationCompat对象的构造器类来设置通知栏的属性
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setContentIntent(pi)   //设置通知点击事件
.setAutoCancel(true)    //通知被点击后自动消失

public static PendingIntent getService(Context context, int requestCode, @NonNull Intent intent, @Flags int flags)
getService参数: 第一个Context,第二个requestCode,第三个Intent目的意图,第四个flags:

  • FLAG_ONE_SHORT:该 PendingIntent 只作用一次。
  • FLAG_NO_CREATE:如果当前系统中不存在相同的 PendingIntent 对象,系统将不会创建该 PendingIntent 对象而是直接返回 null 。
  • FLAG_CANCEL_CURRENT:如果当前系统中已经存在一个相同的 PendingIntent 对象,那么就将先将已有的 PendingIntent 取消,然后重新生成一个 PendingIntent 对象。
  • FLAG_IMMUTABLE:创建的PendingIntent不可变,API23加入。
  • FLAG_UPDATE_CURRENT:如果系统中已存在该 PendingIntent 对象,那么系统将保留该 PendingIntent 对象,但是会使用新的 Intent 来更新之前 PendingIntent 中的 Intent 对象数据,例如更新 Intent 中的 Extras。
    具体参考:https://developer.android.google.cn/develop/ui/views/notifications/navigation?hl=zh-cn

如果您的应用正在运行前台服务(一种在后台运行且生命周期长且用户可察觉到的 Service,如媒体播放器),则需要发出通知。此通知不能像关闭其他通知一样关闭。如需移除通知,必须停止运行服务或从前台状态中移除服务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【书生·浦语】大模型实战营——第五课作业

教程文档&#xff1a;https://github.com/InternLM/tutorial/blob/vansin-patch-4/lmdeploy/lmdeploy.md#tritonserver-%E6%9C%8D%E5%8A%A1%E4%BD%9C%E4%B8%BA%E5%90%8E%E7%AB%AF 视频链接&#xff1a; 作业&#xff1a; 基础作业 使用如下命令创建conda环境 conda create…

【期末考试】数据库综合复习宝典

目录 第一章 数据库系统概述 第二章 关系代数 第四章 关系数据库理论 第五章 数据库设计 第六章 数据库管理系统 第八章 事务管理 第一章 数据库系统概述 1.1三级模式 ①外模式&#xff1a;它为特定的应用程序或用户群体提供了一个数据视图&#xff0c;这个视图是独立于…

评估LLM在细胞数据上的实用性(2)-细胞层面的评估

本文衔接上一篇&#xff1a;评估LLM在细胞数据上的实用性(1)-基本概述 目录 定义参数和任务批次整合多模态整合细胞类型注释 细胞层面的评估批次整合多模态整合细胞类型注释 定义 我们考虑一个预训练LLM表示为 M ( x , θ ) M(x,\theta) M(x,θ)&#xff0c;其基于单细胞数据…

设计模式-传输对象模式

设计模式专栏 模式介绍模式特点应用场景传输对象模式和序列化的区别代码示例Java实现传输对象模式Python实现传输对象模式 传输对象模式在spring中的应用 模式介绍 传输对象模式&#xff08;Transfer Object Pattern&#xff09;是一种设计模式&#xff0c;用于从客户端向服务…

【redis基础1】基础数据类型详解和应用案例

博客计划 &#xff0c;我们从redis开始&#xff0c;主要是因为这一块内容的重要性不亚于数据库&#xff0c;但是很多人往往对redis的问题感到陌生&#xff0c;所以我们先来研究一下。 本篇&#xff0c;我们先看一下redis的基础数据类型详解和应用案例。 1.redis概述 以mysql为…

某mps政务网站jsl加速乐cookie逆向解析

本文针对的目标网站如下&#xff0c;使用base64解密获得 aHR0cHM6Ly93d3cubXBzLmdvdi5jbi8 开篇&#xff1a;加速乐其实算是比较好处理的逆向问题了&#xff0c;了解过的朋友都知道&#xff0c;其本身跟瑞数相似&#xff0c;都是设置cookie后才能成功&#xff0c;设置cookie的过…

配置CentOS系统以支持静态HTTP服务

CentOS是一个流行的Linux发行版&#xff0c;广泛应用于服务器环境。要配置CentOS系统以支持静态HTTP服务&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装Web服务器软件&#xff1a;CentOS自带了Apache HTTP服务器软件&#xff0c;您可以使用以下命令安装它&#xff1…

计算机找不到vcomp140.dll怎样修复?马上教会你修复dll问题

在计算机系统运行过程中&#xff0c;遭遇“vcomp140.dll丢失”的场景并不少见&#xff0c;这一问题的出现往往伴随着软件无法正常启动、运行时错误提示或者系统性能下降等现象。具体场景可能包括但不限于&#xff1a;用户在尝试打开某个依赖于Visual C Redistributable库的应用…

机器学习入门知识

一、引言 机器学习是当前信息技术中最令人振奋的领域之一。在这门课程中&#xff0c;我们将探索该技术的前沿&#xff0c;并能够亲自实现机器学习的算法。 或许你每天都在不知不觉中使用了机器学习的算法。每次你打开谷歌或必应搜索你需要的内容&#xff0c;正是因为它们拥有出…

FFmpeg技术详解

FFmpeg技术详解 本文概不介绍相关安装配置&#xff0c;详情请入官方或者其他大佬博客&#xff0c;此处做出推荐&#xff1a; https://ffmpeg.org/ FFmpeg官网 https://ffmpeg.github.net.cn/developer.html FFmpeg中文文档 https://blog.csdn.net/m0_47449768/article/details/…

以太网抓包软件Wireshake应用介绍( SMART PLC MODBUSTCP通信)

首先介绍下常看到的字符ACK,ACK是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符,表示发来的数据已确认接收无误。在TCP/IP协议中,如果接收方成功的接收到数据,会回复一个ACK数据。通常ACK信号有自己固定的格式,长度大小,由接收方回复给发送方。ACK在TCP的…

Github Copilot最全的安装与使用教程:一款非常好用的AI编程工具

Github Copilot最全的安装与使用教程 第一章 安装1.安装 GitHub Copilot2.获取资格第二章 使用1.产生建议1.1 键入你想要完成的操作的注释1.2 CtrlI 2. 接受建议3.查看下一个建议3.接受部分建议4.在新选项卡接受建议5.完成多项功能6.聊天 GitHub Copilot 供经过验证的学生、教师…

AI绘画风格化实战

在社交软件和短视频平台上&#xff0c;我们时常能看到各种特色鲜明的视觉效果&#xff0c;比如卡通化的图片和中国风的视频剪辑。这些有趣的风格化效果其实都是图像风格化技术的应用成果。 风格化效果举例 MidLibrary 这个网站提供了不同的图像风格&#xff0c;每一种都带有鲜…

【前端性能优化】如何取消http请求

文章目录 需要取消http请求的3种经典场景原生XMLHttpRequest取消http请求fetch取消http请求axios取消http请求哪些情况需要取消HTTP请求取消http请求能带来哪些性能提升 需要取消http请求的3种经典场景 场景一&#xff1a;有一个实时搜索功能&#xff0c;每当用户输入内容改变的…

构建中国人自己的私人GPT-有道GPT

创作不易&#xff0c;请大家多鼓励支持。 在现实生活中&#xff0c;很多人的资料是不愿意公布在互联网上的&#xff0c;但是我们又要使用人工智能的能力帮我们处理文件、做决策、执行命令那怎么办呢&#xff1f;于是我们构建自己或公司的私人GPT变得非常重要。 先看效果 一、…

训练AI模型:寻找最优参数a和b

人工智能的学习之路非常漫长&#xff0c;不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心&#xff0c;我为大家整理了一份600多G的学习资源&#xff0c;基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

基于面向对象,C++实现双链表

双链表同单链表类似&#xff0c;由一个值和两个指针组成 Node.h节点头文件 #pragma once class Node { public:int value;Node* prev;Node* next;Node(int value);~Node(); };Node.cpp节点源文件 #include "Node.h"Node::Node(int value) {this->value value…

深度学习笔记(六)——网络优化(2):参数更新优化器SGD、SGDM、AdaGrad、RMSProp、Adam

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解&#xff0c;如有遗漏或错误&#xff0c;欢迎评论或私信指正。 截图和程序部分引用自北京大学机器学习公开课 在前面的博文中已经学习了构建神经网络的基础需求&#xff0c;搭建了一个简单的双层网络结构来实现数据的分…

【设计模式】什么场景可以考虑使用简单工厂模式

1.概述 工厂模式是一种创建型模式&#xff0c;主要作用就是创建对象&#xff0c;将对象的创建过程和使用的过程进行解耦。我们平时说的工厂模式实际上是对三种不同类型的工厂模式的统称&#xff0c;简单工厂、工厂方法、抽象工厂&#xff0c;而在23种设计模式中&#xff0c;只…

VSCode编写 C/C++ 程序

VSCode 全称 Visual Studio Code&#xff0c;是微软出的一款轻量级代码编辑器&#xff0c;免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性&#xff0c;支持插件扩展&#xff0c;并…