android11 framework怎么修改才能做到类似MIUI的自由窗体始终在最上层?
android默认行为:当开启自由窗体模式时,在Launcher中开启新应用时自由窗口就被隐藏了。
请教下,Android的多窗口Freeform,怎么修改才能使自由窗体始终在最上层显示而不被覆盖掉?
修改源码编译,这个成本太高了,可以尝试替代性的方法。
1、通过修改ActivityManagerService类的updateFreeformWindowVisibilityLocked()函数,将自由窗体设置为最高优先级,从而始终在最上层显示。
2、通过修改WindowManagerService类的updateFreeformWindowVisibilityLocked()函数,实现自由窗体的最高优先级显示。
3、通过修改PhoneWindowManager类,实现多窗口的切换时,自由窗体始终在最上层。
需要允许在应用上层权限_开启应用上层显示权限
要修改Android 11框架的行为,使自由格式的windows始终在顶部,你需要修改Android操作系统的源代码并重新编译。以下是所涉及步骤的概述。
1.请从Android开源项目(AOSP)仓库中获取Android 11的源代码。
2.在Android窗口管理器中找到负责管理自由格式窗口行为的相关代码。
3.修改代码以更改默认行为,使自由格式窗口始终显示在其他窗口之上,无论启动新应用程序与否。
该回答引用ChatGPT
有用望采纳
解决方案:
该回答引用ChatGPT
要让Android自由窗口始终在最上层,您需要对Android源代码进行修改。步骤如下:
1、克隆Android源代码到本地
2、找到控制窗口Z轴顺序的代码,可能在框架的WindowManagerService.java或者其他相关的类中
3、修改代码,让自由窗口的Z轴顺序始终在最上层
4、编译源代码并烧录到设备中,测试自由窗口是否始终在最上层
注意:修改Android源代码需要深入的Android开发知识,并且涉及版权问题。如果不熟悉,请谨慎尝试。
首先,您需要在您的应用程序中启用多窗口自由窗体模式。然后,这需要您在AndroidManifest.xml文件中使用标签来声明您的Activity并指定android:resizeableActivity = "true"属性,这样就能够使您的应用程序支持多窗口自由窗体模式。最后,您可以使用WindowManager.LayoutParams类来修改窗体级别,以使自由窗体总是在最上层显示。
您可以尝试这样
1.ActivityStack:这个组件管理着Android中的所有Activity,您可以在该组件中修改活动堆栈,使自由窗口始终在最上层显示。
2.WindowManagerService:这个组件管理着Android系统中的所有窗口,您可以在该组件中修改窗口层级关系,使自由窗口始终在最上层显示。
您需要通过更改系统源代码来实现这些修改,并且在修改后对系统进行重新编译和安装。
既然是在在Launcher中开启新应用时自由窗口就被隐藏了,那么尝试在fragment层launcher源码找一下,打开app的代码,阅读一下,看是否有window切换的关键代码,尝试注释重新编译launcher,看看效果