WindowManager(WMS)构建全局悬浮窗

首先第一个我们从普通应用构建和系统级应用构建谈起:

普通应用 VS 系统级应用

直接一张图说明

普通应用构建全局悬浮窗

1. 声明动态申请权限

AndroidManifest.xml 文件中添加 android.permission.SYSTEM_ALERT_WINDOW 权限,以允许应用在其他内容之上绘制窗口。

但是这样申请后,并不是一劳永逸。用户还得手动授权,第一次使用时得引导用户跳转到设置页面进行手动授权,并在onActivityResult回调中处理用户的权限请求结果。

2. 配置WindowManager.LayoutParams

获取WindowManager实例WindowManager 是负责管理窗口布局和交互的系统级别服务,可以通过 Context.getSystemService(Context.WINDOW_SERVICE) 获取其唯一的实例

设置核心参数: 实例化WindowManager.LayoutParams,这个类定义了窗口的各种属性。

你需要配置悬浮窗的大小(widthheight)、在屏幕上的绝对位置(xy)以及停靠方式(gravity),

设置 TypeTYPE_APPLICATION_OVERLAY 以保证层级。

还可以设置特定的flag: FLAG_NOT_FOCUSABLE,同时如果不希望悬浮窗拦截触摸事件,可以设置 FLAG_NOT_TOUCHABLE

3. 控制视图

Service 中启动 :在后台 Service 中启动悬浮窗口服务,创建自定义的 View 组件后,调用 WindowManager.addView() 将其添加到屏幕上。

更新布局 :如果悬浮窗是动态的(例如支持用户拖动),可以通过调用 WindowManager.updateViewLayout() 来实时刷新视图的位置或大小。

安全销毁 :悬浮窗显示出来后必须妥善管理生命周期。在销毁 Service 或退出功能时,务必要调用 WindowManager.removeView() 清理并移除悬浮窗,以避免发生内存泄漏

相关推荐
石山岭12 小时前
自己动手写了一个 Android 虚拟定位 App:GPSSimulate 技术实
android·前端
杉氧14 小时前
副作用 (Side Effects) 全攻略:如何像大师一样掌控 Composable 的生命周期?
android·架构·android jetpack
Kapaseker19 小时前
Kotlin Toolchain 0.11 发布:主要是把 Amper 干没了
android·kotlin
三少爷的鞋20 小时前
Android 现代架构不需要事件总线进阶篇
android
杉氧1 天前
深入理解 Compose 重组机制:快照系统如何驱动 UI 精准刷新?
android·架构·android jetpack
召钱熏1 天前
状态枚举正确≠渲染正确:一个语音按钮的状态机边界修复实录
android·前端
杉氧1 天前
深度解析:Jetpack Compose 核心架构与底层原理 —— 十年安卓老兵的“破茧重生”
android·架构·android jetpack
通玄1 天前
Jetpack Compose 入门系列(七):ViewModel 与界面状态管理
android
落魄Android在线炒饭1 天前
Android Framework 开发技巧:android.jar 生成与系统快速编译验证
android
如此风景2 天前
Kotlin Flow操作符学习
android·kotlin