从叠加窗口执行后退按钮 - android

时间:2016-10-04 18:41:59

标签: android android-accessibility android-overlay

我将覆盖视图(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(),以便在按下电话的后退按钮时从窗口管理器中删除此叠加视图。

当从我的叠加布局按下后退按钮时,我会调用我的辅助功能服务并且它正常工作。现在,当我按下手机的后退按钮时,我的叠加视图会保留。因为我没有收到关键事件,因为我在{s}中设置了WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE这个标志。

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

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

使用performGlobalAction(MyAccessibilityService.ACTION_BACK)有没有办法区分实际按键按下和软件触发按键? 关于如何正确实施这一点的任何建议?

1 个答案:

答案 0 :(得分:0)

你不能这样做,因为当活动被杀死时,对话框的上下文会被破坏,你可以使用 WindowManager