android14 未充电状态电量低于15%弹框提示 10%直接关机

上层接收电量变化广播,添加未充电判断,做出弹框或关机动作
SystemUI\src\com\android\systemui\power\PowerUI.java

public void onReceive(Context context, Intent intent) {String action = intent.getAction();if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(action)) {ThreadUtils.postOnBackgroundThread(() -> {if (mPowerManager.isPowerSaveMode()) {mWarnings.dismissLowBatteryWarning();}});} else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {//电量变化广播mHasReceivedBattery = true;final int oldBatteryLevel = mBatteryLevel;mBatteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 100);final int oldBatteryStatus = mBatteryStatus;mBatteryStatus = intent.getIntExtra(BatteryManager.EXTRA_STATUS,BatteryManager.BATTERY_STATUS_UNKNOWN);					final int oldPlugType = mPlugType;mPlugType = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 1);final int oldInvalidCharger = mInvalidCharger;mInvalidCharger = intent.getIntExtra(BatteryManager.EXTRA_INVALID_CHARGER, 0);mLastBatteryStateSnapshot = mCurrentBatteryStateSnapshot;final boolean plugged = mPlugType != 0;final boolean oldPlugged = oldPlugType != 0;int oldBucket = findBatteryLevelBucket(oldBatteryLevel);int bucket = findBatteryLevelBucket(mBatteryLevel);/*** Unisoc: 5G resident reminder Feature decoupling(3/3)* AR: AR.599.001744.006995.022501* method: hook interface* Unisoc Code @{*/if(powerUIEx != null)powerUIEx.remind5GReside(mBatteryLevel,mHandler);/* @} */if (DEBUG) {Slog.d(TAG, "buckets   ....." + mLowBatteryAlertCloseLevel+ " .. " + mLowBatteryReminderLevels[0]+ " .. " + mLowBatteryReminderLevels[1]);Slog.d(TAG, "level          " + oldBatteryLevel + " --> " + mBatteryLevel);Slog.d(TAG, "status         " + oldBatteryStatus + " --> " + mBatteryStatus);Slog.d(TAG, "plugType       " + oldPlugType + " --> " + mPlugType);Slog.d(TAG, "invalidCharger " + oldInvalidCharger + " --> " + mInvalidCharger);Slog.d(TAG, "bucket         " + oldBucket + " --> " + bucket);Slog.d(TAG, "plugged        " + oldPlugged + " --> " + plugged);}if(mBatteryLevel==15 && !plugged){ //判断未充电,电量15时弹框提示//Toast.makeText(mContext, "Battery low. The device will power off when the battery drops to 10%.", Toast.LENGTH_LONG).show();	//也可以通过toast提示mWarnings.showMyLowBatteryWarning();	 		}if(mBatteryLevel<11 && !plugged){ //未充电,电量低于10关机try{Intent shutdownBatteryLevel = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);shutdownBatteryLevel.putExtra(Intent.EXTRA_KEY_CONFIRM,false);shutdownBatteryLevel.putExtra("shutdown_mode","battery");shutdownBatteryLevel.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);mContext.startActivityAsUser(shutdownBatteryLevel,UserHandle.CURRENT);}catch(Exception e){Slog.d(TAG, "batteryLevel e="+e.toString());}}mWarnings.update(mBatteryLevel, bucket, mScreenOffTime);........public interface WarningsUI {/*** Updates battery and screen info for determining whether to trigger battery warnings or* not.* @param batteryLevel The current battery level* @param bucket The current battery bucket* @param screenOffTime How long the screen has been off in millis*/void update(int batteryLevel, int bucket, long screenOffTime);void dismissLowBatteryWarning();void showMyLowBatteryWarning();// add 这个方法在PowerNotificationWarnings.java实现

SystemUI\src\com\android\systemui\power\PowerNotificationWarnings.java

    public void showInvalidChargerWarning() {mInvalidCharger = true;updateNotification();}// addpublic void showJzhkLowBatteryWarning() {final SystemUIDialog d = new SystemUIDialog(mContext);//d.setIconAttribute(android.R.attr.alertDialogIcon);d.setTitle("Warning");d.setCancelable(false);d.setMessage("Battery low. The device will power off when the battery drops to 10%.");d.setPositiveButton(com.android.internal.R.string.ok, null);d.setShowForAllUsers(true);d.show();}// add end

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

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

相关文章

ASP.NET Core 中 Kestrel 的应用及在前后端分离项目中的角色

目录 一、Kestrel 基础&#xff1a;轻量级且高性能的 Web 服务器 二、前后端分离项目架构&#xff1a;Vue、.NET Core API、Nginx 与 Kestrel 2.1 交互流程图 2.2 流程详解 三、Kestrel 在架构中的核心作用 四、launchSettings.json 与 Kestrel 配置的关系及底层机制 4.1…

Kotlin 退出循环总结

文章目录 Kotlin 退出循环总结for循环forEach()嵌套for循环lambda函数inline函数 Kotlin 退出循环总结 for循环 for ((index, value) in list.withIndex()) {if (value "c") {break // 退出循环}println("$index - $value") }// 0 - a // 1 - bfo…

再看C语言

目录 与Java的差异化 编程范式 跨平台 编译过程 包管理 基本类型 内存结构 重点掌握 进制、字节与计算 指针 结构体 关键词 动态内存 模块化 高级特性 动态链接 虚拟内存 打包编译 并发编程 现在需要参与到存储软件开发工作&#xff0c;存储层比较接近OS系统…

机器学习入门 | 训练、推理与其他机器学习活动(预处理、测试与评估)

在训练阶段&#xff0c;训练算法通过优化目标/损失函数在训练数据集上的表现&#xff0c;不断更新模型参数θ。在监督学习场景中&#xff0c;训练数据集由输入-标签对&#xff08;真实输出值&#xff09;组成。目标函数应当奖励模型根据训练输入成功预测真实输出的行为&#xf…

Node.js特训专栏-实战进阶:11. Redis缓存策略与应用场景

&#x1f525; 欢迎来到 Node.js 实战专栏&#xff01;在这里&#xff0c;每一行代码都是解锁高性能应用的钥匙&#xff0c;让我们一起开启 Node.js 的奇妙开发之旅&#xff01; Node.js 特训专栏主页 专栏内容规划详情 Redis 缓存策略与应用场景&#xff1a;从理论到实战的高…

【stm32】HAL库开发——Cube配置基本定时器

目录 一、Cube配置基本定时器 1.定时器CubeMX配置介绍 2.定时器中断控制LED 3.定时器常用函数 4.定时器从模式&#xff08;Reset Mode&#xff09; 5.定时器的从模式&#xff08;Gated Mode&#xff09; 6.定时器的编码器接口 一、Cube配置基本定时器 1.定时器CubeMX配置…

nginx反向代理后端服务restful及token处理

#user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; } #代理mysql服务 stream {upstream mysql_backend {server 192.168…

正确理解Cola StateMachine不内置事务管理机制

✅ 正确理解&#xff1a;Cola StateMachine 并非“不支持”事务一致性&#xff0c;而是“不内置”事务管理机制 因为&#xff1a; Cola StateMachine 是轻量级、无状态、不依赖 Spring 的框架&#xff0c;它本身 不绑定任何事务上下文。它不像 Spring StateMachine 那样自动与…

AudioTrack使用

** AudioTrack ** AudioTrack 是 Android 音频系统中的核心类&#xff0c;用于播放原始音频数据&#xff08;PCM&#xff09;或压缩音频&#xff08;如 MP3、AAC&#xff09;。它提供了低级别的音频播放控制&#xff0c;适合需要精细管理的场景&#xff08;如游戏音效、实时音…

解密:MySQL 的常见存储引擎

在数据库领域&#xff0c;MySQL 作为一款广受欢迎的关系型数据库管理系统&#xff0c;提供了多种存储引擎以满足不同应用场景的需求。每种存储引擎都有其独特的特性、优势和适用场景。本文将深入探讨 MySQL 中几种常见的存储引擎&#xff0c;包括 InnoDB、MyISAM、MEMORY 和 AR…

qt和qtcreator版本关系

实例展示&#xff1a; 如图所示的qtcreator是使用qt5.15安装过程选择勾选了qtcreator 14.0.2&#xff0c;安装完成qtcreator版本信息&#xff1a; 安装过程中选择了这些构件kits&#xff0c;会自动识别到&#xff1a; 使用qt5.9.9另外安装的kits&#xff0c;需要手动设置才能识…

2个任务同时提交到YARN后2个都卡住(CDH)

文章目录 问题描述解决方案1、增加资源2、调整ApplicationMaster资源3、关闭YARN调度器的资源抢占4、不使用公平调度器 问题描述 在CDH集群上&#xff0c;同时提交2个任务到YARN后&#xff0c;2个任务都卡住 解决方案 1、增加资源 增加服务器的内存和CPU 2、调整Applicatio…

web3区块链-ETH以太坊

一. 以太坊概述 以太坊&#xff08;Ethereum&#xff09;作为区块链技术的代表性项目之一&#xff0c;自2015年发布以来&#xff0c;迅速成为全球区块链行业的核心基础设施。相比比特币&#xff0c;以太坊不仅支持点对点的价值转移&#xff0c;还引入了智能合约&#xff0c;使…

【智能协同云图库】智能协同云图库第二弹:用户管理系统后端设计与接口开发

用户管理系统 一、需求分析 对于用户模块&#xff0c;通常要具有下列功能&#xff1a; 二、方案设计 &#xff08;一&#xff09;库表设计 实现用户模块的难度不大&#xff0c;在方案设计阶段&#xff0c;我们需要确认以下内容&#xff1a; 库表设计用户登录流程如何对用户权限…

闲庭信步使用SV搭建图像测试平台:第十三课——谈谈SV的数据类型

&#xff08;本系列只需要modelsim即可完成数字图像的处理&#xff0c;每个工程都搭建了全自动化的仿真环境&#xff0c;只需要双击top_tb.bat文件就可以完成整个的仿真&#xff0c;大大降低了初学者的门槛&#xff01;&#xff01;&#xff01;&#xff01;如需要该系列的工程…

前端进阶之路-从传统前端到VUE-JS(第一期-VUE-JS环境配置)(Node-JS环境配置)(Node-JS/npm换源)

经过前面的传统前端开发学习后&#xff0c;我们接下来进行前端的VUE-JS框架学习&#xff08;写这篇文章的时候VUE-JS最新版是VUE3&#xff0c;所以默认为VUE3即可&#xff09; 首先&#xff0c;我们要配置Node-JS环境&#xff0c;虽然我们还不学习Node-JS但是Node-JS可以快速配…

Requests源码分析:面试考察角度梳理

简单描述执行流程 🌟 Q:能简单描述一下发送一个requests.get(url)请求时,在requests库内部的主要执行流程吗?(从调用get方法到收到响应) 入口委托: get() 方法内部调用 requests.request(GET, url)。Session 接管: request() 方法会获取或隐式创建一个 Session 对象,并…

航天VR赋能,无人机总测实验舱开启高效新篇​

(一)沉浸式培训体验​ 在传统的无人机培训中&#xff0c;操作人员主要通过理论学习和简单的模拟操作来掌握技能。但这种方式存在很大局限性&#xff0c;难以让操作人员真正感受无人机在复杂环境下的运行状态。而航天 VR 技术引入到 VR 无人机总测实验舱后&#xff0c;彻底改变了…

Kotlin 函数与 Lambda 表达式

今天继续分享Kotlin学习内容。 目标&#xff1a;掌握函数定义、调用、参数传递&#xff0c;以及 Lambda 表达式的基础用法 1. 函数&#xff1a;Kotlin 的代码模块化工具 定义&#xff1a;函数是可重复调用的代码块&#xff0c;用于封装逻辑。 语法&#xff1a; fun 函数名(参…

[mcp-servers] docs | AI客户端-MCP服务器-AI 架构

链接&#xff1a;https://github.com/punkpeye/awesome-mcp-servers 服务器调用 相关专栏&#xff1a;实现Json-Rpc docs&#xff1a;精选MCP服务器资源列表 本专栏为精选 模型上下文协议&#xff08;MCP&#xff09;服务器的列表。 MCP 是一种标准协议语言&#xff0c;允许*…