【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 里加上权限配置,如下。 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android…...
c语言:取绝对值
假设我们有一个 long 类型的变量 l,我们希望恢复其绝对值。以下是两种方法的对比: 方法1:使用条件语句 这个很好理解,负数时取负运算 ,用于数值的符号反转。 long abs_value(long l) {if (l < 0) {return -l;} e…...
HTML应用指南:利用GET请求获取全国盒马门店位置信息
随着新零售业态的发展,门店位置信息的获取变得至关重要。作为新零售领域的先锋,盒马鲜生不仅在商业模式创新上持续领先,还积极构建广泛的门店网络,以支持其不断增长的用户群体。本篇文章,我们将继续探究GET请求的实际应…...
MongoDB 深度教程:当 NoSQL 遇上幽默
MongoDB 深度教程:当 NoSQL 遇上幽默 欢迎来到这个 MongoDB 的奇妙冒险!如果你已经了解了 MongoDB 的基础知识,比如 CRUD 操作、数据库和集合的概念,但总觉得自己只是停留在门口徘徊,那么今天这篇教程就是为你量身定做…...
windows安装linux子系统【ubuntu】操作步骤
1.在windows系统中开启【适用于Linux的Windows子系统】 控制面板—程序—程序和功能—启用或关闭Windows功能—勾选适用于Linux的Windows子系统–确定 2.下载安装Linux Ubuntu 22.04.5 LTS系统 Ununtu下载链接 3.安装完Ununtu系统后更新系统 sudo apt update4.进入/usr/l…...
通过k8s请求selfsubjectrulesreviews查询权限
当前是通过kubelet进行查询 curl --cacert /etc/kubernetes/pki/ca.crt \ --cert /var/lib/kubelet/pki/kubelet-client-current.pem \ --key /var/lib/kubelet/pki/kubelet-client-current.pem \ -d - \ -H "Content-Type: application/json" \ -H Accept: applicat…...
如何参与开源项目
目的 就是说一下如何参与开源的项目,通过参与QXlsx来说明开源项目是如何参与的,其它的github上的开源项目,也是这样的流程。 关于GitHub: GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行…...
Java 大视界 -- Java 大数据在智能金融监管中的应用与实践(77)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
使用deepseek快速创作ppt
目录 1.在DeekSeek生成PPT脚本2.打开Kimi3.最终效果 DeepSeek作为目前最强大模型,其推理能力炸裂,但是DeepSeek官方没有提供生成PPT功能,如果让DeepSeek做PPT呢? 有个途径:在DeepSeek让其深度思考做出PPT脚本…...
如何在Python中创建和访问列表
在Python中,列表(list)是一种用于存储一系列有序项目的数据结构。这些项目可以是不同类型的,比如整数、浮点数、字符串,甚至是其他列表(形成嵌套列表)。以下是如何在Python中创建和访问列表的基…...
多线程下jdk1.7的头插法导致的死循环问题
20250208 多线程下jdk1.7的头插法导致的死循环问题 多线程下jdk1.7的头插法导致的死循环问题 【新版Java面试专题视频教程,java八股文面试全套真题深度详解(含大厂高频面试真题)】 jdk1.7在hashmap扩容时使用的是头插法,所以扩容…...
低代码系统-插件功能分析( 某道云)
本文主要把其的插件进行了简单分析,不做业务上的梳理,不做推荐。 可大致分为: 群机器人 信息查询 智能识别 实名验证类 数据库类 通知类 通知类 aPaas增强 考勤同步 财务类 类别 插件名称 功能简介 群机器人类 某钉机器人 即在表单处完…...
手搓基于CNN的Chest X-ray图像分类
数据集Chest X-ray PD Dataset 数据集介绍 - 知乎https://zhuanlan.zhihu.com/p/661311561 CPU版本 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import Dataset, DataLoader from torchvision import transforms, models import …...
Golang 并发机制-7:sync.Once实战应用指南
Go的并发模型是其突出的特性之一,但强大的功能也带来了巨大的责任。sync.Once是由Go的sync包提供的同步原语。它的目的是确保一段代码只执行一次,而不管有多少协程试图执行它。这听起来可能很简单,但它改变了并发环境中管理一次性操作的规则。…...
java nio 底层使用的是select 、poll还是epoll
在 Java NIO 中,底层使用的 I/O 多路复用机制取决于操作系统和 JDK 的实现。 🚀 Java NIO 底层使用机制概述 操作系统默认多路复用机制系统调用Linuxepollepoll_create、epoll_ctl、epoll_waitWindowsselect 或 WSAPollselect() 或 WSAPoll()macOS / B…...
Kotlin协程详解——协程取消与超时
目录 一、协程取消 1.取消协程的执行 2.使计算代码可取消 3.在finally中释放资源 4.运行不能取消的代码块 二、协程超时 异步超时与资源管理 一、协程取消 1.取消协程的执行 在一个长时间运行的应用程序中,你也许需要对你的后台协程进行细粒度的控制。 比如…...
双向链表、内核链表和gdb(20250208)
单向链表 节点 数据域 指针域(后继节点) 双向链表 相比于单项指针,双向指针存有前驱节点的地址,使链表的灵活性更高。 内核链表 在内核中 offsetof:获取结构体某个成员到结构体开头的偏移量container_of:根据结…...
全程Kali linux---CTFshow misc入门(38-50)
第三十八题: ctfshow{48b722b570c603ef58cc0b83bbf7680d} 第三十九题: 37换成1,36换成0,就得到长度为287的二进制字符串,因为不能被8整除所以,考虑每7位转换一个字符,得到flag。 ctfshow{5281…...
MySQL 8.0.41安装教程(2025年2月8号)
下载网址:https://www.mysql.com/cn/downloads/ 点击 我选择的是第二个离线安装 点击之后,选择直接下载: 下载完成双击: 我选择的是自定义安装: 右边默认已经存在我选择的8.0.41 点击红框中的,自定义安装路…...
【自学笔记】Deepseek的基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Deepseek知识点总览一、Deepseek简介二、Deepseek的三大适用模式1. 基础模型(V3)2. 深度思考(R1)3. 联网搜索模式 三…...
10N10-ASEMI中低压N沟道MOS管10N10
编辑:ll 10N10-ASEMI中低压N沟道MOS管10N10 型号:10N10 品牌:ASEMI 封装:TO-252 最大漏源电流:10A 漏源击穿电压:100V 批号:最新 RDS(ON)Max:135mΩ …...
2025年2月8日(Adafruit_PCA9685详细使用)
Adafruit_PCA9685 是一个 Python 模块,用于与 PCA9685 驱动芯片进行通信,该芯片常用于控制多个伺服电机。PCA9685 是一个 16 通道的 PWM(脉宽调制)驱动器,常用于需要精确控制多个伺服电机的应用。 以下是详细的使用方…...
MR30分布式IO模块:驱动智能制造工厂的工业互联与高效控制新范式
在工业4.0与智能制造浪潮的推动下,传统制造业正经历着从“机械驱动”向“数据驱动”的深刻转型。作为工业数据连接领域的领军者,明达技术凭借其自主研发的MR30分布式IO模块,以创新的技术架构与卓越的性能表现,为全球制造企业构建了…...
Reqable使用实践
一、背景 日常开发中,难免要抓取请求数据,查看接口数据,从而更好定位问题,基于这个原因,查找了一些抓包工具,例如: HttpCanary、 Steam 、Fiddler等,不是要钱,就是只对苹…...
数据可视化基本套路总结
首先从维基百科上搬出数据可视化的概念: 数据可视化是关于数据之视觉表现形式的研究;其中,这种数据的视觉表现形式被定义为一种以某种概要形式抽提出来的信息,包括相应信息单位的各种属性和变量。 用人话简单来说,数据…...
TensorFlow域对抗训练DANN神经网络分析MNIST与Blobs数据集梯度反转层提升目标域适应能力可视化...
全文链接:https://tecdat.cn/?p39656 本文围绕基于TensorFlow实现的神经网络对抗训练域适应方法展开研究。详细介绍了梯度反转层的原理与实现,通过MNIST和Blobs等数据集进行实验,对比了不同训练方式(仅源域训练、域对抗训练等&am…...
DNS劫持和HTTPDNS
DNS 劫持是一种网络攻击手段,攻击者通过篡改域名系统(DNS)解析过程,将用户请求的域名重定向到恶意网站或其他不正确的地址。这种攻击可以用于多种目的,例如窃取用户数据、传播恶意软件或进行钓鱼攻击。 举个例子 假设…...
云原生微服务
能够认识到云原生微服务对应用程序设计的影响,描述无状态微服务,并比较单体和微服务架构。要充分利用运营模式,您需要以不同的方式思考应用程序设计。您需要考虑云原生微服务。此图像显示了一个应用程序,该应用程序被设计为小型微…...
【deepSeek R1】Ollama 更改模型安装位置 以及应用安装位置
【deepSeek R1】Ollama 更改模型安装位置 以及应用安装位置 本地版部署deepSeek R1 可以参考文章 3分钟教你搭建属于自己的本地大模型 DeepSeek R1 Ollama 是一个开源工具,旨在帮助用户轻松在本地计算机上运行、部署和管理大型语言模型(LLMs)…...
windows + visual studio 2019 使用cmake 编译构建静、动态库并调用详解
环境 windows visual studio 2019 visual studio 2019创建cmake工程 1. 静态库.lib 1.1 静态库编译生成 以下是我创建的cmake工程文件结构,只关注高亮文件夹部分 libout 存放编译生成的.lib文件libsrc 存放编译用的源代码和头文件CMakeLists.txt 此次编译CMak…...
使用Feign代替RestTemplet
Feign RestTemplet存在的问题 String url "http: //userservice/user/" order.getUserId(); User user restTemplate.getFor0bject(url, User.class);可读性差参数复杂URL难以维护 Feign声明式的Http客户端,官方地址:https://github.com…...
苹果笔记本安装jmeter
下载并安装jmeter即可,jmeter官网下载地址:Apache JMeter - Download Apache JMeter 参考以下文章:“https://blog.csdn.net/weixin_51664828/article/details/145008755”...
设备通过国标GB28181接入EasyCVR,显示在线但视频无法播放的原因排查
安防监控EasyCVR平台支持多种视频源接入,包括但不限于IP摄像头、NVR、编码器、流媒体服务器等。平台采用高效的视频流接入技术,支持大规模视频流的并发接入,确保视频流的稳定性和流畅性。 有用户反馈,项目现场使用国标GB28181接入…...
为什么我喜欢在 CSS 中使用 RegEx
说到正则(RegEx),我们第一反应往往是“在编程中用来匹配或验证字符串”,比如做表单验证。但其实在 CSS 中,也能用到与正则类似的选择器特性,为我们的样式管理带来诸多便利。别怀疑,以下就是如何…...
深度剖析 Redisson 分布式锁:原理、实现与应用实践
文章目录 写在文章开头详解Redisson 分布式锁使用和实现前置准备工作分布式锁的基本使用公平锁的使用联锁的使用读写锁基本使用常见问题Redisson和Jedis有什么区别redisson如何实现分布式锁redisson如何实现分布式锁的可重入redisson如何实现公平锁Redisson的watchdog机制是什么…...
今日AI和商界事件(2025-02-08)
今日AI领域的重大事件主要包括以下几个方面: 一、DeepSeek引发的行业震动 事件概述:DeepSeek作为近期崛起的AI模型,以其低成本、高性能的推理能力引发了广泛关注。其开源策略、独特的出身以及强大的算力表现,使得微软、英伟达等…...
Mac 基于Ollama 本地部署DeepSeek离线模型
最近节日期间最火的除了《哪吒》就是deepseek了,毕竟又让西方各个层面都瑟瑟发抖的产品。DeepSeek凭借其强大的AI能力真的是在全球多个领域展现出强大的影响力。由于受到外部势力的恶意攻击倒是deepseek官方服务不稳定,国内其他厂家的适配版本也不是很稳…...
Python截图轻量化工具
这是用Python做到截图工具,不过由于使用了ctypes调用了Windows的API, 同时访问了Windows中"C:/Windows/Cursors/"中的.cur光标样式文件, 这个工具只适用于Windows环境; 如果要提升其跨平台性的话,需要考虑替换ctypes的一些专属于W…...
怎麼在Chrome中設置代理伺服器?
出於隱私、安全或者訪問特定網路資源的需求,設置代理伺服器顯得尤為重要。本文將詳細介紹如何在Chrome流覽器中進行代理伺服器的設置。 代理伺服器是介於電腦和互聯網之間的一道“中間牆”。幫助間接訪問互聯網資源,這樣實際的IP地址被代理伺服器的IP地…...
【数据结构中链表常用的方法实现过程】
线性表 线性表包括:顺序表、链表、栈,队列等,本节我们先学习顺序表。 顺序表 利用新的数据类型——顺序表,操作数组 顺序表的本质就是对数组的增删改查。 /*** 打印顺序表中的所有元素*/Overridepublic void display() {for (int i 0; i…...
语言月赛 202308【小粉兔处理题解审核志愿者轮换】题解(AC)
》》》点我查看「视频」详解》》》 [语言月赛 202308] 小粉兔处理题解审核志愿者轮换 题目背景 又到了一周的周日,扶苏又像催命一样开始催促小粉兔处理题解审核志愿者的轮换。但是懒狗小粉兔总是把这项工作拖到第二天凌晨。 【这里有一张内部群聊图,…...
第二十二章:游戏结缘与现实的相遇
“终于结束了……” 小冷的手微微颤抖,笔在纸上划过,签下放弃 985 高校研究生入学资格的名字,那一刻,数月来压在心头沉甸甸的巨石轰然崩塌,扬起的尘埃渐渐消散。曾经,学术巅峰犹如夜空中遥不可及却又熠熠生…...
(ICLR=2025)生成的表征对齐:训练扩散Transformer比你想象的更简单
生成的表征对齐:训练扩散Transformer比你想象的更简单 paper是KAIST发表在ICLR 2025的工作 paper title:REPRESENTATION ALIGNMENT FOR GENERATION: TRAINING DIFFUSION TRANSFORMERS IS EASIER THAN YOU THINK Code:链接 ABSTRACT 最近的研究表明&…...
保姆级教程--DeepSeek部署
以DeepSeek-R1或其他类似模型为例,涵盖环境配置、代码部署和运行测试的全流程: 准备工作 1. 注册 Cloud Studio - 访问 [Cloud Studio 官网](https://cloudstudio.net/),使用腾讯云账号登录。 - 完成实名认证(如需长期使用…...
[css] 黑白主题切换
link动态引入 类名切换 css滤镜 var 类名切换 v-bind css预处理器mixin类名切换 【前端知识分享】CSS主题切换方案...
C语言练习题
文章目录 1. 递归实现将字符串str中的元素逆序2. 对数组arr进行冒泡排序(升序)3. 对数组从下标low到下标hihg区间内的元素进行快速排序(升序)4. 在数组中利用二分查找(折半查找)目标关键字5. 求n的阶乘6. 判断year是否为闰年7. 求…...
Lambda 表达式
一、Lambda 表达式简介 Lambda 表达式是一种简洁的函数式编程方式,用于实现只有一个方法的接口(例如函数式接口)。 基本语法 (parameters) -> expression (parameters) -> { statements; } 参数:可以有零个或多个参数。…...
Vue 鼠标事件合集,关于鼠标右键的处理方法(改写鼠标右键方法、自定义鼠标右键)
鼠标事件使用 mousedown"canvasDown($event)"按下事件合集 click 点击某个对象时触发 mousedown 鼠标按钮被按下时触发 mouseup 鼠标按钮被松开时触发 mouseleave 当鼠标指针移出元素时触发 dblclick 双击时触发 mousemove 鼠标移动时触发,…...
go语言中的接口
接口简介 现实生活中的接口 现实生活中手机、相机、U 盘都可以和电脑的 USB 接口建立连接。我们不需要关注 usb 卡槽大小是否一样,因为所有的 USB 接口都是按照统一的标准来设计的。 Golang 中的接口(interface) Golang 中的接口是一种抽象…...
如何在Android Studio中开发一个简单的Android应用?
Android Studio是开发Android应用的官方集成开发环境(IDE),它提供了许多强大的功能,使得开发者能够高效地创建Android应用。如果你是Android开发的初学者,本文将引导你如何在Android Studio中开发一个简单的Android应用…...