【问题标题】:Is possible remove an overlay with WindowManager when press back or home button in android?在android中按下返回或主页按钮时是否可以使用WindowManager删除覆盖?
【发布时间】: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


    【解决方案1】:

    只需要将windowmanager type 设置为APPLICATION,这样windowmanager 只会在应用程序打开时附加视图,不需要覆盖主页或后退按钮,查看文档here

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                        WindowManager.LayoutParams.MATCH_PARENT,
                        WindowManager.LayoutParams.MATCH_PARENT,
                        WindowManager.LayoutParams.TYPE_APPLICATION,
                        0,
                        PixelFormat.TRANSLUCENT);
    

    【讨论】:

    • 不工作你能用一些例子解释一下
    • 你能解释一下具体是什么问题吗?
    • 实际上,问题是我必须一个一个地显示两个叠加层。第一个包含全屏,但一段时间后它会变小。问题->第二个没有关闭
    • @rohit kumar,这是一个完全不同的问题,请用代码狙击手创建一个新问题并将链接传递给我,以便能够帮助你,快乐编码:)
    【解决方案2】:

    删除视图很容易。我注意到您已将其设置为不可见,这是一个可以接受的解决方案。您还可以保留对它的引用并执行以下操作:

    windowManager.removeView(mYourView);
    

    问题将是检测后退按钮按下。你不能可靠地做到这一点。您依赖于硬件期望,即按下后退按钮会发送一个带有 KEYCODE_BACK 的键事件,而操作系统不做此保证。但是,在我的 Droid turbo 上,以下工作:

    首先您需要一个单独的 xml 文件来配置您的无障碍服务。

    service_config.xml 的内容:

    <?xml version="1.0" encoding="utf-8"?>
    <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
        ...
        android:canRequestFilterKeyEvents="true"
        android:accessibilityFlags="flagDefault|flagRequestFilterKeyEvents"
        ...
        />
    

    AndroidManifest.xml 的内容:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
        <application ...>
            <service ...>
                <meta-data
                    android:name="android.accessibilityservice"
                    android:resource="@xml/service_config" />
            </service>
        </application>
    </manifest>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      相关资源
      最近更新 更多