我添加了一个覆盖视图(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)
吗?关于如何正确实施这一点的任何建议?