android 屏蔽系统通知

1.源码路径:
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java​

2.NotificationListener类是负责处理监听通知更新并将其传递给向用户显示的NotificationPresenter,也就是SystemUI中监听到系统通知的起点.

public class NotificationListener extends NotificationListenerWithPlugins {private static final String TAG = "NotificationListener";private static final boolean DEBUG = StatusBar.DEBUG;private final Context mContext;private final NotificationManager mNotificationManager;private final Handler mMainHandler;private final List<NotificationHandler> mNotificationHandlers = new ArrayList<>();private final ArrayList<NotificationSettingsListener> mSettingsListeners = new ArrayList<>();public NotificationListener(Context context,NotificationManager notificationManager,@Main Handler mainHandler) {mContext = context;mNotificationManager = notificationManager;mMainHandler = mainHandler;}public void addNotificationHandler(NotificationHandler handler) {if (mNotificationHandlers.contains(handler)) {throw new IllegalArgumentException("Listener is already added");}mNotificationHandlers.add(handler);}public void addNotificationSettingsListener(NotificationSettingsListener listener) {mSettingsListeners.add(listener);}@Overridepublic void onListenerConnected() {if (DEBUG) Log.d(TAG, "onListenerConnected");onPluginConnected();final StatusBarNotification[] notifications = getActiveNotifications();if (notifications == null) {Log.w(TAG, "onListenerConnected unable to get active notifications.");return;}final RankingMap currentRanking = getCurrentRanking();mMainHandler.post(() -> {final List<Ranking> newRankings = new ArrayList<>();for (StatusBarNotification sbn : notifications) {newRankings.add(getRankingOrTemporaryStandIn(currentRanking, sbn.getKey()));}final RankingMap completeMap = new RankingMap(newRankings.toArray(new Ranking[0]));for (StatusBarNotification sbn : notifications) {for (NotificationHandler listener : mNotificationHandlers) {listener.onNotificationPosted(sbn, completeMap);}}for (NotificationHandler listener : mNotificationHandlers) {listener.onNotificationsInitialized();}});onSilentStatusBarIconsVisibilityChanged(mNotificationManager.shouldHideSilentStatusBarIcons());}@Overridepublic void onNotificationPosted(final StatusBarNotification sbn,final RankingMap rankingMap) {if (DEBUG) Log.d(TAG, "onNotificationPosted: " + sbn);/*
1.当收到通知时,会调用该方法,然后把通知Handler更新界面,所以可以在这个屏蔽通知的显示,可以通过参数设置,或者通过设置系统参数,这样可以通过配置参数就可以自由控制通知的显示,如下面,设置android_statusbar_visible参数,默认值为false,即不显示通知,if(!SystemProperties.getBoolean("android_statusbar_visible",false)) return;*/if (sbn != null && !onPluginNotificationPosted(sbn, rankingMap)) {mMainHandler.post(() -> {processForRemoteInput(sbn.getNotification(), mContext);for (NotificationHandler handler : mNotificationHandlers) {handler.onNotificationPosted(sbn, rankingMap);}});}}@Overridepublic void onNotificationRemoved(StatusBarNotification sbn, RankingMap rankingMap,int reason) {if (DEBUG) Log.d(TAG, "onNotificationRemoved: " + sbn + " reason: " + reason);/*
2.  当通知被移除时,也需要坐下过滤if(!SystemProperties.getBoolean("android_statusbar_visible",false)) return;*/if (sbn != null && !onPluginNotificationRemoved(sbn, rankingMap)) {mMainHandler.post(() -> {for (NotificationHandler handler : mNotificationHandlers) {handler.onNotificationRemoved(sbn, rankingMap, reason);}});}}@Overridepublic void onNotificationRemoved(StatusBarNotification sbn, RankingMap rankingMap) {onNotificationRemoved(sbn, rankingMap, UNDEFINED_DISMISS_REASON);}@Overridepublic void onNotificationRankingUpdate(final RankingMap rankingMap) {if (DEBUG) Log.d(TAG, "onRankingUpdate");/*
3.这里是更新通知在通知列表上的排列,通知也需要坐下过滤if(!SystemProperties.getBoolean("android_statusbar_visible",false)) return;*/if (rankingMap != null) {RankingMap r = onPluginRankingUpdate(rankingMap);mMainHandler.post(() -> {for (NotificationHandler handler : mNotificationHandlers) {handler.onNotificationRankingUpdate(r);}});}}......
}

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

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

相关文章

奇偶生成器选型参数,结构原理,工艺与注意问题总结

🏡《总目录》 目录 1,概述2,工作原理2.1,输入数据2.2,奇偶校验位选择2.3,数据处理2.4,输出校验位2.5,错误检测2.6,控制逻辑3,结构特点3.1,输入接口3.2,处理核心3.3,输出接口4,

ARP协议定义及工作原理

ARP的定义 地址解析协议(Address Resolution Protocol&#xff0c;ARP)&#xff1a;ARP协议可以将IPv4地址(一种逻辑地址)转换为各种网络所需的硬件地址(一种物理地址)。换句话说&#xff0c;所谓的地址解析的目标就是发现逻辑地址与物理地址的映射关系。 ARP仅用于IPv4协议&a…

Centos服务器Open Gauss 部署

近期很多的项目由于信创要求使用一些国产的数据库&#xff0c;比如OpenGauss。OpenGuass是华为高斯DB的开源版&#xff0c;内核还是PostgreSQL&#xff0c;商业版是收费的。这里记录一下是如何安装部署 的。 官方中文文档 官方下载地址 部署要求 操作系统要求 ARM&#xff…

拆分巨石:将MVPS和MVAS应用于遗留应用程序——可持续架构(六)

前言 MVP 和 MVA 的概念不仅适用于新应用程序&#xff1b;它们提供了一种新颖的方式来审视对遗留系统的范围变更&#xff0c;以防止过快地承担过多的变化 - 参见图1。MVA 可以帮助组织评估和更新其技术标准&#xff0c;通过展示新技术如何真正对支持 MVP 至关重要。创建 MVA 可…

绿联 安装PDF工具

这是一个强大的本地托管的基于 Web 的 PDF 操作工具&#xff0c;使用 docker&#xff0c;允许您对 PDF 文件执行各种操作&#xff0c;例如拆分、合并、转换、重组、添加图像、旋转、压缩等。这个本地托管的 Web 应用程序最初是 100% ChatGPT 制作的应用程序&#xff0c;现已发展…

BaseDao封装增删改查

文章目录 什么是BaseDao操作代码增删改查询单个数据查询多个数据 总结 什么是BaseDao BaseDao是&#xff1a; 数据库里负责增加&#xff0c;删除&#xff0c;修改&#xff0c;查询 具体来说是一种接口代码,公共方法的接口类。 在dao层新建basedao,其他dao层接口继承basedao 相…

近红外染料CY5.5-COOH的合成和表征

近红外染料CY5.5-COOH是一种重要的荧光染料&#xff0c;应用于生物成像、药物传递和光动力治疗等领域。为了深入了解其性质和应用&#xff0c;我们进行了CY5.5-COOH的合成和表征。 一、合成方法 CY5.5-COOH的合成采用多步反应的方法。首先&#xff0c;以CY5.5为原料&#xff…

代码随想录算法训练营第二十三天(二叉树9)|669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树(JAVA)

文章目录 669. 修剪二叉搜索树解题思路源码 108. 将有序数组转换为二叉搜索树解题思路源码 538. 把二叉搜索树转换为累加树解题思路源码 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使…

电子开关选型参数,结构原理,工艺与注意问题总结

🏡《总目录》 目录 1,概述2,工作原理3,结构特点3.1,多模式控制3.2,内置高压晶体管3.3,保护功能3.4,集成补偿技术4,工艺流程4.1,晶圆处理工序4.2,晶圆针测工序5,选型参数5.1,功率需求5

【医学嵌入模型】中文医疗文本处理大模型 PCL-MedBERT

中文医疗文本处理大模型 PCL-MedBERT 提出背景对ELECTRA限制的深入分析eHealth的创新方法实体识别关系抽取 总结 最近再做医学项目&#xff0c;需要从文本中抽取医学概念和关系&#xff0c;通用模型的抽取效果还可以。 但还想找医学嵌入模型&#xff0c;能够更准确地从文本中识…

常见的Nginx+Redis+MQ+DB架构设计

三高&#xff0c;复杂的架构 SQRS CAP 缓存&#xff0c;限流 【Redis&#xff0c;缓存】 cache-aside 缓存cache&#xff1a;数据源的副本 store 1. Read/Write Through Pattern 读写穿透模式 redis&#xff1a;放当前在线用户&#xff0c;热点数据

第十四届蓝桥杯第十题:蜗牛分享

问题描述 输入格式 输出格式 输出共一行&#xff0c;一个浮点数表示答案&#xff08;四舍五入保留两位小数&#xff09;。 样例输入 3 1 10 11 1 1 2 1样例输出 4.20样例说明 蜗牛路线&#xff1a;(0,0)→(1,0)→(1,1)→(10,1)→(10,0)→(11,0)(0,0)→(1,0)→(1,1)→(10,1…

【C语言】结构体详解 (二) 内存函数、结构体传参

目录 1、 结构体的内存对齐 1.1、对齐规则 1.2、练习1、练习2&#xff08;演示对齐规则1、2、3、4&#xff09; 2、为什么存在内存对齐 2.1、平台原因&#xff08;移植原因&#xff09; 2.2、性能原因 2.3、那么如何即满足对齐&#xff0c;又要节省空间呢&#xff1f; …

element-ui inputNumber 组件源码分享

今日简单分享 inputNumber 组件的实现原理&#xff0c;主要从以下四个方面来分享&#xff1a; 1、inputNumber 组件的页面结构 2、inputNumber 组件的属性 3、inputNumber 组件的事件 4、inputNumber 组件的方法 一、inputNumber 组件的页面结构。 二、inputNumber 组件的…

在计算成像中集成物理和学习模型的即插即用方法

即插即用就是把算法的近端算子换成去噪器 摘要 即插即用先验(PnP)是通过物理模型和学习模型的集成来解决计算成像问题的最广泛使用的框架之一。PnP利用高保真物理传感器模型和强大的机器学习方法对数据进行先验建模&#xff0c;以提供最先进的重建算法。PnP算法在最小化数据保…

文心一言、讯飞星火、GPT、通义千问等线上API调用示例

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径及一点个人思考大模型应用开发实用开源项目汇总大模型问答项目…

零基础教程:R语言lavaan结构方程模型(SEM)

查看原文>>>最新基于R语言lavaan结构方程模型&#xff08;SEM&#xff09;实践技术应用 基于R语言lavaan程序包&#xff0c;通过理论讲解和实际操作相结合的方式&#xff0c;由浅入深地系统介绍结构方程模型的建立、拟合、评估、筛选和结果展示的全过程。我们筛选大量…

07-工作流设计:如何设计合理的多人开发模式?

一个企业级项目是由多人合作完成的&#xff0c;不同开发者在本地开发完代码之后&#xff0c;可能提交到同一个代码仓库&#xff0c;同一个开发者也可能同时开发几个功能特性。这种多人合作开发、多功能并行开发的特性如果处理不好&#xff0c;就会带来诸如丢失代码、合错代码、…

echarts 旭日图 层级嵌套

基础的可以直接参考官网进行配置。 Echarts旭日图的特点如下&#xff1a; 1 层次结构展示&#xff1a;旭日图适用于展示层次结构数据&#xff0c;通过不同的扇形区域来表示不同层次的数据。每个扇形区域的大小和位置表示了数据的大小和层次关系。 2 渐进式呈现&#xff1a;旭…

RelayAttention:让大型语言模型更高效地处理长提示符

一、前言 虽然大型语言模型 (LLM) 近年来取得了非常显著的进展&#xff0c;也在各种自然语言处理任务中展现出强大的能力。然而&#xff0c;LLM 的在实际的应用落地层面也面临着一些实际挑战&#xff0c;其中之一就是效率和成本问题&#xff0c;导致了在垂直行业实际落地的应用…