【发布时间】:2016-02-23 10:54:04
【问题描述】:
我试图在网站上找到我的问题的一些答案,但我没有找到任何东西,我不确定当按下返回或主页按钮时是否可以使用 windowManager 删除或隐藏覆盖。
这是我现在拥有的。当用户进入我的应用程序的设置屏幕时,我使用覆盖所有屏幕的无障碍服务放置了一个覆盖。 WindowManager 显示覆盖,但是当我尝试按返回按钮或主页按钮时它不起作用。好像被屏蔽了。只有在应用进程停止时才会消失覆盖。
请注意,我没有使用活动来显示叠加层。我正在使用 accessitibiliyService 来执行从 AccessibilityService 扩展的任务。
我想做的是用户按下返回或主页按钮,删除覆盖。
这是我显示叠加层的代码:
private String checkOverlay = "hide"
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
0,
PixelFormat.TRANSLUCENT);
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
overlayRunning.setBackgroundColor(Color.parseColor("#1C1C1C"));
wm.addView(overlayRunning, params);
checkOverlay = "show";
我已将此方法添加到类中:
@Override
public boolean onKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
Log.e(TAG, "Back button??");
Log.e(TAG, "Back button??");
overlayRunning.setVisibility(View.INVISIBLE);
case KeyEvent.KEYCODE_HOME:
Log.e(TAG, "Home button??");
if(checkOverlay.equals("show")) {
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
wm.removeViewImmediate(overlayRunning);
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
checkOverlay = "hide";
}
return false;
}
return super.onKeyEvent(event);
}
【问题讨论】:
标签: android window-managers android-windowmanager accessibilityservice