锁屏界面无法无法显示Toast

2024-09-06 09:08

本文主要是介绍锁屏界面无法无法显示Toast,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在锁屏界面开发几个快捷方式启动某些应用,例如:Calculator, Camera,Google voice和Call等,界面如下。且这种做法很普遍,很多厂商都有。


说明:

1>左边图片右下角为快速启动Calculator的快捷方式,在无需解锁的情况下,进入Calcaulator应用。

2>右边图片为从launcher中启动Calculator后,操作时弹出的Toast提示。

那么问题来了,当不解锁启动Calculator后,同操作无法显示Toast内容。


1.这里搜寻API,得到如下结果,本问题的核心也正在此。

/frameworks/base/core/java/android/view/WindowManager.java

        /** Window flag: special flag to let windows be shown when the screen* is locked. This will let application windows take precedence over* key guard or any other lock screens. Can be used with* {@link #FLAG_KEEP_SCREEN_ON} to turn screen on and display windows* directly before showing the key guard window.  Can be used with* {@link #FLAG_DISMISS_KEYGUARD} to automatically fully dismisss* non-secure keyguards.  This flag only applies to the top-most* full-screen window.*/public static final int FLAG_SHOW_WHEN_LOCKED = 0x00080000;
        /** In a multiuser system if this flag is set and the owner is a system process then this* window will appear on all user screens. This overrides the default behavior of window* types that normally only appear on the owning user's screen. Refer to each window type* to determine its default behavior.** {@hide} */public static final int PRIVATE_FLAG_SHOW_FOR_ALL_USERS = 0x00000010;

用法如下,为此也写了个demo来验证此问题:


2.但是Toast的getWindowParams方法带@hide的隐藏接口,非公开API,于是尝试使用反射方法获取。


3.但是随之而来的又一个问题,WindowManager.LayoutParams的privateFlags也为非公开API。

        /*** Control flags that are private to the platform.* @hide*/public int privateFlags;

4.针对隐藏属性API,似乎无计可施。想到这是一个预置的应用,若是拥有平台签名,即可随意访问public的非公共API。

此方案可以参考另外一片文档《Android APK获取平台系统签名权限》,此处不作详述。

5.作为Calculator,原本可以是一个很普通的应用,若单为了这个Toast去提升应用之权限,似乎有不妥。于是又找了另一个法子,通过Toast.java源码的阅读,发现:

=>在调用Toast.makeText()方法时,会取new Toast对象;


而Toast的构造方法中又New了一个TN对象


6.结果发现,TN构造方法中就已经开始对此类“窗口”进行flags初始化。


说明:

上图时进行修改后的方法,为了避免对所有默认无参构造生成的Toast产生影响,即增加一个“构造方法”,使之更为方便地为类似Calculator这种应用场景的Toast服务。


7.

最终解决效果,如果加上para.type = WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL;将还能在Lockscreen中显示,如果用户快速返回退至Lock。



这篇关于锁屏界面无法无法显示Toast的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141596

相关文章

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

nacos服务无法注册到nacos服务中心问题及解决

《nacos服务无法注册到nacos服务中心问题及解决》本文详细描述了在Linux服务器上使用Tomcat启动Java程序时,服务无法注册到Nacos的排查过程,通过一系列排查步骤,发现问题出在Tom... 目录简介依赖异常情况排查断点调试原因解决NacosRegisterOnWar结果总结简介1、程序在

在C#中调用Windows防火墙界面的常见方式

《在C#中调用Windows防火墙界面的常见方式》在C#中调用Windows防火墙界面(基础设置或高级安全设置),可以使用进程启动(Process.Start)或Win32API来实现,所以本文给大家... 目录引言1. 直接启动防火墙界面(1) 打开基本防火墙设置(firewall.cpl)(2) 打开高

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.