Android Framework 电池提醒相关Dialog熄屏消失的问题

记录一下花了三四天干一天就能完成的需求的傻事。

说在前头,这篇文章记录了电池提醒dialog相关,弹出dialog且熄屏再亮屏dialog不会消失的代码,这篇废话比较多,看正常代码直接跳到代码3。

故事背景

        需求要求添加非法电池的弹窗,我想着,区区dialog不是问题,于是我找找找找到了检测电池状态的地方,添加了非法电池相关判断,开始编译SystemUI安装。

代码故事

        在讲代码故事之前接受一下我用到的dialog,一个是AlertDialog,一个是SystemUIDialog,AlertDialog就是常用的弹窗,这个大家应该挺熟悉的,下面讲讲SystemUIDialog

/*** Base class for dialogs that should appear over panels and keyguard.*/
public class SystemUIDialog extends AlertDialog {

        好了,对于SystemUIDialog我知道的就这么多,它继承自AlertDialog。

代码1

AlertDialog dialog = new AlertDialog.Builder(mContext).setTitle("电池老化").setMessage("电池老化,请及时替换电池").setPositiveButton("确认",null).create();//dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);//dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM|WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);dialog.setCanceledOnTouchOutside(false);dialog.show();

设备黑屏了。

报错了:

报错分析,没有activity或者activity没生成。

看到这个报错我也不知道怎么搞, mContext也不能getActivity,但是我很快就看到了源码里SystemUIDialog的使用。

像下面这个温度提醒的代码

    private void showThermalShutdownDialog() {if (mThermalShutdownDialog != null) return;final SystemUIDialog d = new SystemUIDialog(mContext);d.setIconAttribute(android.R.attr.alertDialogIcon);d.setTitle(R.string.thermal_shutdown_title);d.setMessage(R.string.thermal_shutdown_dialog_message);d.setPositiveButton(com.android.internal.R.string.ok, null);d.setShowForAllUsers(true);d.setOnDismissListener(dialog -> mThermalShutdownDialog = null);d.show();mThermalShutdownDialog = d;}

它用的也是mContext,而且能正常弹出,本着源码都是值得学习的心态,我马上模仿了一波,用了SystemUIDialog,也就造就了我的代码2.

代码2

			systemUIDialog = new SystemUIDialog(mContext);systemUIDialog.setTitle(R.string.dream_battery_aging_dialog_title);systemUIDialog.setMessage(R.string.dream_battery_aging_dialog_message);systemUIDialog.setPositiveButton(com.android.internal.R.string.ok, null);systemUIDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);systemUIDialog.setShowForAllUsers(true);systemUIDialog.setCanceledOnTouchOutside(false);systemUIDialog.show();

没问题正常弹出,没黑屏没报错。

了却了一个需求轻松了,然后我就放着设备,它正常到点熄屏了,这时我想打开再看一眼我的劳动成果,dialog不见了!!!!我还没点确认dialog怎么就消失了,万一用户看不到呢。

我猜测难道SystemUIDialog挂的是window,黑屏window就销毁了,它也跟着销毁了??

然后就是各种试,想让它熄屏后再亮屏dialog也还在,没成功就是了,最后靠导师指导,成就了代码3

代码3

好消息,这是成功滴。不黑屏,熄屏再开也还在。

		AlertDialog dialog = new AlertDialog.Builder(mContext).setTitle("dd").setMessage("fhjk").setPositiveButton("quer",null).create();dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM|WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);dialog.setCanceledOnTouchOutside(false);dialog.show();

错误尝试

过程中用了DialogFragment,没有Activity,不行。

用了Activity,让它的theme属性为android:theme="@android:style/Theme.Dialog

然后使用intent隐形跳转,不行,报错,这个activity不在SystemUI.apk压缩包里啥啥啥的。

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

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

相关文章

蔚来的理想——蔚来产品战略深度剖析

导读 持续亏损的蔚来,未来是否会出局? 跑去做手机的蔚来,是瞎搞还是精心谋划? 换电和服务,真的是蔚来的核心竞争力吗? 做全栈技术值得吗?会不会拖死蔚来? 这些具体抉择与具体方…

[多线程]阻塞队列和生产者消费者模型

目录 1.阻塞队列 1.1引言 1.2Java标准库中的阻塞队列 1.3自主通过Java代码实现一个阻塞队列(泛型实现) 2.生产者消费者模型 1.阻塞队列 1.1引言 阻塞队列是多线程部分一个重要的概念,它相比于一般队列,有两个特点: 1.线程是安全的 2.带有阻塞功能 1) 队列为空,出队列就会阻…

语义分割 DeepLab V1网络学习笔记 (附代码)

论文地址:https://arxiv.org/abs/1412.7062 代码地址:GitHub - TheLegendAli/DeepLab-Context 1.是什么? DeepLab V1是一种基于VGG模型的语义分割模型,它使用了空洞卷积和全连接条件随机(CRF)来提高分割…

JAVA-作业7-画一个笑脸

要求如题 代码如下: SmileFace01: import java.awt.Color; import java.awt.Graphics;import javax.swing.JPanel;public class SmileFace01 extends JPanel {Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);int width getWidth(…

MyBatis 设计模式解析

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

实用的 ES6 代码片段

在我们的开发流程中,我们经常会遇到一些具有挑战性的问题,而解决这些问题可能只需要几行代码。在本文中,我试图整理出一些有用的代码片段,帮助您在处理 URL、DOM、事件、日期、用户偏好等方面时更加便捷。 所有这些代码片段都是从…

代码随想录刷题题Day5

刷题的第五天,希望自己能够不断坚持下去,迎来蜕变。😀😀😀 刷题语言:C / Python Day5 任务 ● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数 ● 1. 两数之和 1 哈希表理…

【开题报告】基于SpringBoot的艾滋病科普平台的设计与实现

1.选题背景 艾滋病(艾滋病毒感染与免疫缺陷综合征)是一种严重的传染病,对人类的健康和社会稳定造成了极大的影响。全球范围内,艾滋病已经成为公共卫生领域的重大挑战之一。尽管在科学研究和医疗技术方面取得了一定进展&#xff0…

MT8390商显广告机主板_MTK联发科安卓主板方案开发

商显广告机采用MediaTek 联发科平台主板方案。安卓主板具有更高的性能、更丰富的接口、更多的存储空间以及更为便捷的网络连接方式,可以满足更为复杂的开发和应用需求使其应用领域更加多元化,被广泛应用于各行各业。 商显广告机主板基于联发科MT8390八核…

repmgr手动切换主从失败,报错‘DETAIL: local node last receive LSN‘

repmgr:5.4.0 pgsql: 14.2 OS:centos7.8刚搭建好的repmgr主从使用命令手动进行切换失败,日志如下 postgresdb02:~$ repmgr standby switchover NOTICE: executing switchover on node "db02" (ID: 2) NOTICE: local node "db02" (ID: 2) will be promoted…

智能AI系统ChatGPT网站系统源码+Midjourney绘画+支持DALL-E3文生图,支持最新GPT-4-Turbo模型

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么

一个页面从输入URL到加载显示完成经历了以下过程: DNS解析:浏览器会解析URL中的域名,将其转换为对应的IP地址。如果浏览器缓存中存在该域名的IP地址,则跳过DNS解析步骤。 建立TCP连接:通过解析得到的IP地址&#xff0…

Ubuntu18.04安装Ipopt-3.12.8流程

本文主要介绍在Ubuntu18.04中安装Ipopt库的流程,及过程报错的解决方法,已经有很多关于Ipopt安装的博客,但经过我的测试,很多都失效了,经过探索,找到可流畅的安装Ipopt的方法,总结成本篇博客。 …

使用typescript搭建express

使用typescript搭建express 开始 为这个项目创建一个新的目录,使用下面的命令初始化项目并创建一个包。 NPM init -y初始化后,让我们安装必要的包 npm i express dotenv cors helmet body-parser 在express中配置typescript npm i -D typescript typ…

C#多进程通信之共享内存方式

共享内存方式应该最简单易用的 直接上代码,下面列出了2种,一种是映射视图,一种是映射流,任选一种即可 服务端: MemoryMappedFile memoryAccessor MemoryMappedFile.CreateNew("ProcessCommunicationAccessor", 500, MemoryMappedFileAccess.ReadWrite);//创建共享…

WordPress批量上传文章和自动发布文章的方法

专业介绍:WordPress批量上传文章技术解析 在现代数字时代,内容创作是网络存在的驱动力之一。对于博客作者、新闻编辑和内容管理员而言,高效地批量上传文章至WordPress平台是提高工作效率的一个关键方面。WordPress作为最受欢迎的内容管理系统…

【C语言】递归详解

目录 1.前言2. 递归的定义3. 递归的限制条件4. 递归举例4.1 求n的阶乘4.1.1 分析和代码实现4.1.2 画图演示 4.2 顺序打印一个整数的每一位4.2.1 分析和代码实现4.2.2 画图推演 4.3 求第n个斐波那契数 5. 递归与迭代5.1 迭代求第n个斐波那契数 1.前言 这次博客内容是与递归有关&…

【数组】-Lc27-移除元素(快慢双指针)

写在前面 最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。 目录 写在前面一、场景描述二、具体步骤1.环境说明2.代码 写在后面 一、场景描述 给你一个数组 nums 和一个值 val,你需要 原地移除所有数值等于…

迪文串口5使用查询方式发送数据

迪文屏串口5寄存器如下 发送数据我采用的不是中断,而是查询发送标志位实现的。 串口5不像串口2一样(串口2可以位寻址,串口5不行),所以如果采用查询模式,需要判断寄存器的数据,我的写法比较简单…

Django高级之——Ajax、cookie与session

一 什么是Ajax AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据&#xf…