当前位置: 首页 > 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;用户可与好友进行私密语音通话。 群组语音…...

观察在虚拟机内使用Taotoken调用API的延迟与稳定性表现

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察在虚拟机内使用Taotoken调用API的延迟与稳定性表现 在开发与测试环境中&#xff0c;虚拟机&#xff08;VM&#xff09;是常见的…...

Z轴传感技术在大屏触控中的应用与优化

1. Z轴传感技术&#xff1a;重新定义大屏触控的物理维度十年前我第一次接触银行ATM的触控屏时&#xff0c;那种生硬的点击反馈让人总想多戳几下确认操作是否成功。如今站在商场里观察用户操作自助点餐机&#xff0c;类似的迟疑依然普遍存在——这正是传统二维触控的体验天花板。…...

观察taotoken用量看板如何帮助个人开发者精细化控制api成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察taotoken用量看板如何帮助个人开发者精细化控制api成本 对于个人开发者或小型团队而言&#xff0c;在使用大模型API进行项目开…...

【Oracle数据库指南】第32篇:Oracle归档日志管理与LogMiner日志分析

上一篇【第31篇】Oracle重做日志文件管理操作详解 下一篇【第33篇】Oracle表管理与分区表详解 摘要 归档日志&#xff08;Archive Log&#xff09;是Oracle数据库实现时间点恢复的核心机制&#xff0c;也是数据库备份恢复策略的重要组成部分。本文详细讲解归档模式的开启与配置…...

AI智能体自动化部署:Agent Factory 两分钟构建专家级AI助手

1. 项目概述&#xff1a;Agent Factory 是什么&#xff1f; 如果你和我一样&#xff0c;对AI智能体&#xff08;AI Agent&#xff09;的潜力感到兴奋&#xff0c;但又对部署一个功能完整、面向公众的专家级Agent感到头疼——需要配置身份、记忆、知识库、Web界面&#xff0c;还…...

R3nzSkin英雄联盟皮肤修改器:终极免费皮肤体验完整指南

R3nzSkin英雄联盟皮肤修改器&#xff1a;终极免费皮肤体验完整指南 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin R3nzSkin是一款专为《英雄联盟》玩家设计的开源内存修改工具&#xff0…...

苹果将在培训应用中采用AI生成主播,解决传统培训规模化与个性化难题

苹果培训应用引入AI生成主播据9to5mac报道&#xff0c;Aaron Perris在X平台披露&#xff0c;苹果公司将很快在其内部培训应用“Apple Sales Coach”中采用AI生成主播&#xff0c;用于制作销售培训视频。该应用由苹果此前的“SEED”应用更新而来&#xff0c;旨在向全球苹果销售合…...

Angular+Claude协同开发全栈实践(企业级项目落地手册)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AngularClaude协同开发全栈实践&#xff08;企业级项目落地手册&#xff09; 在现代企业级应用开发中&#xff0c;前端框架与AI辅助编程的深度集成正成为提效关键。Angular 提供结构化、可扩展的单页应…...

别再为Canvas跨域头疼了!手把手教你用UniApp H5搞定网络图片转Base64并生成海报(附完整代码)

UniApp H5开发实战&#xff1a;Canvas跨域图片处理与海报生成全攻略 在移动端H5开发中&#xff0c;Canvas绘制网络图片并生成分享海报是个常见需求&#xff0c;但跨域问题往往让开发者头疼不已。本文将带你深入理解Canvas的CORS限制本质&#xff0c;对比两种主流解决方案的技术…...

终极PT资源管理指南:如何用auto_feed_js实现100+站点一键转载

终极PT资源管理指南&#xff1a;如何用auto_feed_js实现100站点一键转载 【免费下载链接】auto_feed_js PT站一键转载脚本 项目地址: https://gitcode.com/gh_mirrors/au/auto_feed_js 在PT&#xff08;Private Tracker&#xff09;社区中&#xff0c;资源分享是核心价值…...