当前位置: 首页 > news >正文

【Android】Android开发应用如何开启任务栏消息通知

Android开发应用如何开启任务栏消息通知

  • 1. 获取通知权限
  • 2.编写通知工具类
  • 3. 进行任务栏消息通知

1. 获取通知权限

在 AndroidManifest.xml 里加上权限配置,如下。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><!--  权限配置  --><!--  通知栏信息权限  --><uses-permission android:name="android.permission.POST_NOTIFICATIONS" /><!--  下面是application配置  --></manifest>

可以在任意活动类中检查并申请相关权限

import android.content.pm.PackageManager;
import android.Manifest;
import android.os.Build;
import android.os.Bundle;
import android.widget.Button;
import android.widget.Toast;import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;import com.example.sda.R;/*** @author pengYuJun*/
public class MainActivity extends AppCompatActivity {/*** 通知权限自定义编码*/private static final int NOTIFICATION_PERMISSION_CODE = 1;@Overrideprotected void onCreate(Bundle savedInstanceState) {// 调用父类的 onCreate 方法,以确保正确初始化活动super.onCreate(savedInstanceState);// 设置页面布局配置setContentView(R.layout.activity_main);// 检查权限,并申请if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {checkPermission();}}/*** 检查并请求所需权限*/@RequiresApi(api = Build.VERSION_CODES.TIRAMISU)private void checkPermission(){// 检查通知权限if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {// 请求权限ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.POST_NOTIFICATIONS}, NOTIFICATION_PERMISSION_CODE);}}/*** 权限请求结果返回*/@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (grantResults.length == 0){return;}if (requestCode == NOTIFICATION_PERMISSION_CODE) {if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {// 权限被拒绝,显示提示信息Toast.makeText(this, "申请通知权限被拒绝", Toast.LENGTH_SHORT).show();}}}
}

2.编写通知工具类

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Build;import androidx.core.app.NotificationCompat;import com.example.sda.R;
import com.example.sda.activity.MainActivity;/*** @author pengYuJun*/
public class NotificationUtils {public static void showNotification(Context context, String title, String content) {NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);String channelId = context.getResources().getString(R.string.app_name);String channelName = context.getResources().getString(R.string.app_name);// 创建通知渠道(仅在 API 级别 26 及更高版本中需要)if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {NotificationChannel channel = new NotificationChannel(channelId,channelName,NotificationManager.IMPORTANCE_HIGH // 使用高重要性);// 注册渠道manager.createNotificationChannel(channel);}// 通知点击的跳转页面Intent intentTarget = new Intent(context.getApplicationContext(), MainActivity.class);intentTarget.putExtra("xxx","xxx");intentTarget.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intentTarget, PendingIntent.FLAG_IMMUTABLE);// 创建通知Notification notification = new NotificationCompat.Builder(context, channelId).setContentTitle(title).setContentText(content).setContentIntent(pendingIntent).setWhen(System.currentTimeMillis()).setSmallIcon(R.drawable.icon_app).setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_app)).setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL).setPriority(NotificationCompat.PRIORITY_HIGH) // 使用高优先级.build();// 获取当前时间戳(毫秒),作为通知Idlong currentTimeMillis = System.currentTimeMillis();// 将时间戳转换为 int 类型int notifyId = (int) (currentTimeMillis % Integer.MAX_VALUE);// 发送通知manager.notify(notifyId, notification);}
}

注意,当版本高时,创建通知渠道,需要使用高重要性: NotificationManager.IMPORTANCE_HIGH,这样通知会弹出悬挂横幅弹窗。若版本低时,则需要高优先级:setPriority(NotificationCompat.PRIORITY_HIGH)。当不需要弹出悬挂横幅弹窗时,默认重要性、默认优先级即可。

再注意,每次改变重要性、优先级这些,需要卸载app再重新安装才能生效。至少在笔者2025/2/7开发时,为如此。

其他配置可自行根据需求探索。

3. 进行任务栏消息通知

NotificationUtils.showNotification(getApplicationContext(), "title", "message");

相关文章:

【Android】Android开发应用如何开启任务栏消息通知

Android开发应用如何开启任务栏消息通知 1. 获取通知权限2.编写通知工具类3. 进行任务栏消息通知 1. 获取通知权限 在 AndroidManifest.xml 里加上权限配置&#xff0c;如下。 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android…...

上传文件报错:the request was rejected because no multipart boundary was found

后端使用的springboot的MultipartFile上传文件&#xff0c;接口使用apifox调试过没有问题&#xff0c;但前端调接口报错。前端使用了fetch发送formData数据。 the request was rejected because no multipart boundary was found 前端使用的请求头是 multipart/form-data 没有…...

大模型—Dify本地化部署实战

Dify本地化部署实战 系统要求 安装 Dify 之前, 请确保你的机器已满足最低安装要求: CPU >= 2 CoreRAM >= 4 GiB本地部署 开始前先简单介绍下部署Dify需要用到的组件,稍微有点多,但放心,有Docker你怕啥? 关系数据库:postgres缓存:Redis向量数据库:支持weaviate…...

功能架构元模型

功能架构的元模型是对功能架构进行描述和建模的基础框架,它有助于统一不同团队对系统的理解,并为系统的设计和开发提供一致的标准和规范。虽然具体的元模型可能因不同的应用领域和特定需求而有所差异,但一般来说,功能架构的元模型可以涵盖以下几个方面: 组件/模块元模型:…...

常用工具类——Collections集合框架

常用工具类——Collections集合框架 Collections 是 JDK 提供的一个工具类&#xff0c;提供了一系列静态方法&#xff0c;分类来复习&#xff01; 1.排序操作 reverse(List list) :反转顺序shuffle(List list) &#xff1a; 洗牌&#xff0c;将顺序打乱sort(List list) &…...

e2studio开发RA2E1(9)----定时器GPT配置输入捕获

e2studio开发RA2E1.9--定时器GPT配置输入捕获 概述视频教学样品申请硬件准备参考程序源码下载选择计时器时钟源UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()printf输出重定向到串口定时器输入捕获配…...

25/2/7 <机器人基础>雅可比矩阵计算 雅可比伪逆

雅可比矩阵计算 雅可比矩阵的定义 假设我们有一个简单的两个关节的平面机器人臂&#xff0c;其末端执行器的位置可以表示为&#xff1a; 其中&#xff1a; L1​ 和 L2 是机器人臂的长度。θ1​ 和 θ2是关节的角度。 计算雅可比矩阵 雅可比矩阵 JJ 的定义是将关节速度与末…...

网络爬虫js逆向之异步栈跟栈案例

【注意&#xff01;&#xff01;&#xff01;】 前言&#xff1a; 1. 本章主要讲解js逆向之异步栈跟栈的知识&#xff08;通过单步执行调试&#xff09; 2. 使用关键字搜定位加密入口 3. 本专栏通过多篇文章【文字案例】的形式系统化进行描述 4. 本文章全文进行了脱敏处理 5. 详…...

使用Ollama本地部署deepseek

1、下载安装Ollama 前往下载页面 https://ollama.com/download下载好安装包&#xff0c;如同安装软件一样&#xff0c;直接安装即可 win中默认为C盘&#xff0c;如果需要修改到其他盘&#xff0c;查找具体教程 运行list命令&#xff0c;检查是否安装成功 2、修改模型下载的…...

Rust错误处理:从灭火器到核按钮的生存指南

开篇&#xff1a;错误处理的生存哲学 在Rust的平行宇宙里&#xff0c;错误分为两种人格&#xff1a; panic! → 核按钮&#x1f4a3;&#xff08;不可恢复&#xff0c;全系统警报&#xff09;Result → 灭火器&#x1f9ef;&#xff08;可控制&#xff0c;局部处理&#xff0…...

Golang:Go 1.23 版本新特性介绍

流行的编程语言Go已经发布了1.23版本&#xff0c;带来了许多改进、优化和新特性。在Go 1.22发布六个月后&#xff0c;这次更新增强了工具链、运行时和库&#xff0c;同时保持了向后兼容性。 Go 1.23 的新增特性主要包括语言特性、工具链改进、标准库更新等方面&#xff0c;以下…...

电脑运行黑屏是什么原因?原因及解决方法

电脑运行黑屏是指电脑在正常开机或使用过程中&#xff0c;突然出现屏幕变黑&#xff0c;无法显示任何内容的现象。这种现象可能会给用户带来很多不便&#xff0c;甚至造成数据丢失或硬件损坏。那么&#xff0c;电脑运行黑屏是什么原因呢&#xff1f;下面我们将分析几种可能的原…...

redis之AOF持久化过程

流程图 在redis.conf文件中配置appendonly为yes则开启aof持久化机制 #开启aof持久化&#xff0c;默认关闭为no appendonly no也可以在命令行开启 aof刷盘策略 #每个写操作都会同步刷盘。 appendfsync always #执行命令后先放入aof缓冲区&#xff0c;每秒钟将缓冲区数据刷盘…...

Elasticsearch:向量搜索的快速介绍

作者&#xff1a;来自 Elastic Valentin Crettaz 本文是三篇系列文章中的第一篇&#xff0c;将深入探讨向量搜索&#xff08;也称为语义搜索&#xff09;的复杂性&#xff0c;以及它在 Elasticsearch 中的实现方式。 本文是三篇系列文章中的第一篇&#xff0c;将深入探讨向量搜…...

Docker在安装时遇到的问题(第一部分)

一、在用docker-config-manager安装yum源时出现错误 [rootlocalhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 已加载插件&#xff1a;fastestmirror, langpacks adding repo from: https://download.docker.com/linux/ce…...

使用 OpenGL ES 在 iOS 上渲染一个四边形:从基础到实现

使用 OpenGL ES 在 iOS 上渲染一个四边形:从基础到实现 在 iOS 开发中,OpenGL ES 是一个强大的工具,用于实现高性能的 2D 和 3D 图形渲染。本文将详细分析一段完整的代码,展示如何使用 OpenGL ES 在 iOS 上渲染一个简单的四边形。我们将从代码的结构、关键模块、着色器的实…...

Spring Boot 2 快速教程:WebFlux处理流程(五)

WebFlux请求处理流程 下面是spring mvc的请求处理流程 具体步骤&#xff1a; 第一步&#xff1a;发起请求到前端控制器(DispatcherServlet) 第二步&#xff1a;前端控制器请求HandlerMapping查找 Handler &#xff08;可以根据xml配置、注解进行查找&#xff09; 匹配条件包括…...

Vue 鼠标事件合集,关于鼠标右键的处理方法(改写鼠标右键方法、自定义鼠标右键)

鼠标事件使用 mousedown"canvasDown($event)"按下事件合集 click 点击某个对象时触发 mousedown 鼠标按钮被按下时触发 mouseup 鼠标按钮被松开时触发 mouseleave 当鼠标指针移出元素时触发 dblclick 双击时触发 mousemove 鼠标移动时触发&#xff0c…...

两种交换排序算法--冒泡,快速

目录 1.冒泡排序原理 2.快速排序原理 3.冒泡代码实现 4.快速排序代码实现 1.冒泡排序原理 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;基本思想是通过反复交换相邻的元素&#xff0c;直到整个序列有序。它的名字来源于较大的元素像气泡…...

语音交友app系统源码功能及技术研发流程剖析

语音交友App的核心功能包括语音聊天、语音房间、社交互动等&#xff0c;开发流程涵盖需求分析、技术选型、前后端开发、实时通信集成、测试优化、部署上线及运营维护。 一、语音交友App的大概功能 1. 语音聊天 一对一聊天&#xff1a;用户可与好友进行私密语音通话。 群组语音…...

Win11装Anaconda总卡住?试试这个Miniconda曲线救国法(附清华源配置)

Win11装Anaconda总卡住&#xff1f;试试这个Miniconda曲线救国法&#xff08;附清华源配置&#xff09; 最近在Windows 11上安装Anaconda时&#xff0c;不少开发者都遇到了进度条卡死或包提取失败的困扰。这个问题看似简单&#xff0c;却让很多数据科学初学者和Python开发者头疼…...

程序员成长之路:从技术热爱到工程艺术

1. 程序人生&#xff1a;从技术热爱到工程艺术1.1 技术启蒙与早期实践1987年进入武汉大学计算机系标志着一段技术人生的开始。最初接触的是Motorola 68000处理器系统&#xff0c;配置540KB内存&#xff0c;运行UNIX操作系统。这种八人共享的计算环境成为编程技术的第一课堂。大…...

千问3.5-27B效果展示:手写笔记图片→文字转录→知识点归类→复习卡片生成

千问3.5-27B效果展示&#xff1a;手写笔记图片→文字转录→知识点归类→复习卡片生成 1. 模型核心能力概览 Qwen3.5-27B作为一款视觉多模态理解模型&#xff0c;在知识处理领域展现出独特优势。它不仅能理解图片内容&#xff0c;还能对信息进行深度加工。本次重点展示其从手写…...

如何让键盘听懂你的设备语言?设备条件判断打造智能多设备键盘映射方案

如何让键盘听懂你的设备语言&#xff1f;设备条件判断打造智能多设备键盘映射方案 【免费下载链接】Karabiner-Elements Karabiner-Elements is a powerful utility for keyboard customization on macOS Sierra (10.12) or later. 项目地址: https://gitcode.com/gh_mirrors…...

颠覆式开源工具OptiScaler:全平台显卡优化解决方案

颠覆式开源工具OptiScaler&#xff1a;全平台显卡优化解决方案 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 你的显卡真的被充分…...

从约束到报告:一份给Synopsys PT新手的保姆级命令行操作指南

从约束到报告&#xff1a;一份给Synopsys PT新手的保姆级命令行操作指南 第一次打开PrimeTime&#xff08;PT&#xff09;时&#xff0c;面对黑底白字的命令行界面和密密麻麻的时序报告&#xff0c;大多数数字IC工程师都会感到手足无措。作为Synopsys的旗舰级静态时序分析&…...

OpenClaw多通道控制:Qwen3-32B-Chat同时响应飞书与网页端指令

OpenClaw多通道控制&#xff1a;Qwen3-32B-Chat同时响应飞书与网页端指令 1. 为什么需要多通道控制&#xff1f; 上周三晚上11点&#xff0c;我正在用OpenClaw的网页控制台整理项目文档&#xff0c;突然飞书弹出同事的紧急需求&#xff1a;"能不能立刻帮我生成上季度销售…...

从零构建大模型?斯坦福CS336爆火课程带你闯关,附超全学习资源包!

文章介绍了斯坦福大学CS336《从零开始构建语言模型》课程&#xff0c;该课程借鉴操作系统课程理念&#xff0c;带领学生体验语言模型创建的各个环节&#xff0c;包括数据收集、模型构建、训练和评估。课程内容实践性强&#xff0c;需要较多学习开发时间&#xff0c;适合有一定基…...

华为防火墙NAT(Easy-IP)实战:多区域安全访问控制与地址转换

1. 华为防火墙NAT(Easy-IP)技术解析 华为防火墙的NAT(Easy-IP)功能是企业网络架构中实现安全访问和地址转换的核心技术。简单来说&#xff0c;它就像是一个智能门卫&#xff0c;不仅负责检查进出人员的身份&#xff08;安全策略&#xff09;&#xff0c;还能帮内部员工隐藏真实…...

Beyond Compare 5 授权生成技术方案:基于密钥算法的永久授权实现指南

Beyond Compare 5 授权生成技术方案&#xff1a;基于密钥算法的永久授权实现指南 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 技术背景&#xff1a;破解文件对比工具授权限制的技术挑战 在现…...