Android Overlay View使某些应用程序暂停

时间:2018-06-28 19:58:05

标签: android overlay

我已经创建了一个叠加活动,该活动具有创建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,则问题应用程序将在其下方运行。但后来我无法与覆盖层交互:/

2 个答案:

答案 0 :(得分:0)

该应用程序可能在其onPause()方法中编写了一些代码来冻结它。通常,游戏会在onStop()onPause()中暂停,这样用户就不会偶然失去进度。就像打个电话一样,或者他们按下了主页或“最近”按钮。

答案 1 :(得分:0)

我根据Floaties库的此类弄清楚了。

https://github.com/ericbhatti/floaties/blob/master/FloatiesLibrary/floaties/src/main/java/com/bezyapps/floatieslibrary/Floaty.java

窗口管理器可以通过updateViewLayout方法更新视图参数。当我想输入或不输入文字时,只需删除FLAG_NOT_FOCUSABLE并将其重新添加到叠加层的两个不同状态即可