我将覆盖视图(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)
有没有办法区分实际按键按下和软件触发按键?
关于如何正确实施这一点的任何建议?