我已经创建了一个叠加活动,该活动具有创建TYPE_APPLICATION_OVERLAY类型的窗口的请求权限,然后启动创建该窗口的服务。一切正常,我可以与它以及视图后面的启动器主屏幕进行交互(这只是一个搜索文本框,在您键入时具有交互结果)。
问题是,我发现有一个应用程序,当我运行此叠加层时,该应用程序被冻结,就像它处于暂停状态一样(这是一个游戏)。但是我已经尝试在其他应用程序上进行叠加,它可以像Google Maps甚至其他游戏一样正常工作。
这是我在服务中创建窗口的方式
//Add the view to the window.
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
//Specify the view position
params.gravity = Gravity.TOP | Gravity.LEFT; //Initially view will be added to top-left corner
params.x = 0;
//Add the view to the window
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mWindowManager.addView(mFloatingView, params);
在该问题应用程序之上,我还尝试了其他应用程序,例如facebook聊天头,并且该应用程序可以与它们一起使用,因此必须可行。
以前有人遇到过吗?我真的是Android编程的新手,所以我不确定要寻找什么
谢谢!
编辑,我发现如果我使用FLAG_NOT_FOCUSABLE,则问题应用程序将在其下方运行。但后来我无法与覆盖层交互:/
答案 0 :(得分:0)
该应用程序可能在其onPause()
方法中编写了一些代码来冻结它。通常,游戏会在onStop()
或onPause()
中暂停,这样用户就不会偶然失去进度。就像打个电话一样,或者他们按下了主页或“最近”按钮。
答案 1 :(得分:0)
我根据Floaties库的此类弄清楚了。
窗口管理器可以通过updateViewLayout方法更新视图参数。当我想输入或不输入文字时,只需删除FLAG_NOT_FOCUSABLE并将其重新添加到叠加层的两个不同状态即可