2

我添加了一个覆盖视图(LinearLayout)WindowManager ,并设置了以下参数:

private void setWindowParams(WindowManager.LayoutParams params) {
    params.height = WindowManager.LayoutParams.WRAP_CONTENT;
    params.width = WindowManager.LayoutParams.WRAP_CONTENT;
    params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
    params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 
        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
    params.format = PixelFormat.TRANSLUCENT;
    params.gravity = Gravity.CENTER;
}

此 LinearLayout 包含三个按钮“HOME”、“RECENTS”、“BACK”

onKeyEvent()当按下手机的后退按钮时,我已实现从窗口管理器中删除此覆盖视图。

当从我的覆盖布局中按下后退按钮时,我会调用我的辅助功能服务并且它可以正常工作。现在,当我按下手机的后退按钮时,我的叠加视图仍然存在。因为我WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE在参数中设置了这个标志,所以它没有接收到关键事件。

但是当我没有设置这个标志时,从叠加层按下后退按钮只会隐藏叠加层本身,而不是在它下面的活动上执行。

我希望我的叠加层在按下手机的后退按钮时隐藏。并且还可以在从我的叠加层按下后退按钮时执行后退按钮功能。

有什么方法可以区分实际的按钮按下和软件触发的按钮按下performGlobalAction(MyAccessibilityService.ACTION_BACK)吗?关于如何正确实施这一点的任何建议?

4

1 回答 1

0

你不能这样做,因为当 Activity 被杀死时对话框的上下文将被销毁,你可以使用 WindowManager

于 2016-10-04T19:13:24.693 回答