当前位置: 首页 > news >正文

Android悬浮窗导致其它应用黑屏问题解决办法

Android悬浮窗导致其它应用黑屏问题解决办法

背景

项目需要做一个悬浮窗,用于控制一个后台服务,但是发现开启该服务之后某些应用会黑屏,具体体现就是只有一个悬浮窗,然后整个屏幕都是黑的。

排查

原以为是后台服务导致的,于是在应用商店下载了有类似后台服务的应用程序进行对比,发现均未出现这种现象,还在github上找了使用了类似后台服务的开源项目对关键代码进行了比较,并对不同点进行了对照试验,发现均未能解决问题;之后才想到可能是悬浮窗的问题,于是屏蔽了悬浮窗显示逻辑,这才确认了是悬浮窗的问题。

问题解决

该问题的根本是WindowManager.LayoutParamsformat属性设置问题,设置这个属性是因为我的悬浮窗是组合了多个基本组件,比如按钮,文本框,将悬浮窗添加到桌面上时,背景默认是黑色的。

为此我将format属性设置为PixelFormat.RGBA_8888,此时背景确实变成透明的了,但是就引发了本文的问题,在某些应用上显示这类悬浮窗时,应用窗口就变成全黑了。

问题的根本原因是因为WindowManager.LayoutParamsformat属性默认是PixelFormat.OPAQUE,而源码中对该属性的说明是:

	/** System chooses an opaque format (no alpha bits required) */public static final int OPAQUE       = -1;

可以看到,因为默认没有alpha通道,所以背景为黑色,但是又不能设置为PixelFormat.RGBA_8888,那么怎么办呢?答案是继续看源码,PixelFormat源码:

	public static final int UNKNOWN      = 0;/** System chooses a format that supports translucency (many alpha bits) */public static final int TRANSLUCENT  = -3;/*** System chooses a format that supports transparency* (at least 1 alpha bit)*/public static final int TRANSPARENT  = -2;/** System chooses an opaque format (no alpha bits required) */public static final int OPAQUE       = -1;

可以看到,TRANSLUCENT 只是要求具备alpha通道,但是具体几位并未限制,而TRANSPARENT则要求至少1位alpha通道,那么将format属性设置为PixelFormat.TRANSLUCENT能不能行呢?
答案是可以的,也就是本文最终的解决方案:

format属性设置为PixelFormat.TRANSLUCENT即可完美兼容悬浮窗和这类黑屏应用。

http://www.xdnf.cn/news/1185769.html

相关文章:

  • The Magic Mask for Android:解锁无限可能的安卓自定义套件
  • FT和RAG如何选择
  • win11 使用adb 获取安卓系统日志
  • freqtrade关于获取k线数量,以及显示时间的问题
  • C++中使用Essentia实现STFT/ISTFT
  • DNS 协议
  • 【unitrix】 6.15 “非零非负一“的整数类型(NonZeroNonMinusOne)特质(non_zero_non_minus_one.rs)
  • Linux parted问题:指定分区边界失效
  • 【vue vapor jsx 未雨绸缪】
  • C# 基于halcon的视觉工作流-章23-圆查找
  • Spring Boot2 静态资源、Rest映射、请求映射源码分析
  • Sklearn 机器学习 数值指标 均方误差MSE
  • 初探HashMap中的HashCode方法
  • Java——Spring框架全面解析
  • Seaborn可视化
  • 如何理解SpringBoot starters的自动装配
  • 【linux】Haproxy七层代理
  • 基于新型群智能优化算法的BP神经网络初始权值与偏置优化
  • docker-compose up -d 显示no configuration file provided: not found什么问题
  • 【C++】二叉搜索数
  • CIU32L051 DMA+Lwrb环形队列实现串口无阻塞性数据的收发 + 数据百分百不丢失的实现
  • Effective C++ 条款01:视 C++ 为一个语言联邦
  • php算法-- 关联数组使用,优化sip账号去重
  • MyBatis高级应用实战指南
  • 构建跨平台远程医疗系统中的视频通路技术方案探究
  • OT82111_VC1:USB OTG音频解码器固件技术解析
  • 华为昇腾NPU卡 文生音频[T2A]大模型suno/bark模型推理使用
  • Java研学-RabbitMQ(三)
  • 杂谈:前端开发中的常见问题
  • XCTF-crypto-幂数加密