【问题标题】:How do screen overlays detect (and disable themselves) when a run-time permission is requested?当请求运行时权限时,屏幕覆盖如何检测(并禁用自身)?
【发布时间】:2017-06-09 14:41:28
【问题描述】:

如果应用程序在屏幕覆盖处于活动状态时请求用户授予运行时权限,系统会发出警告说已检测到屏幕覆盖 - 然后用户需要手动停用屏幕覆盖,直到他们真正可以授予权限。从用户体验的角度来看,这很糟糕。

但是最近我看到了一些应用程序 - 特别是 Facebook Messenger(聊天头) - 通过简单地在请求权限时自动禁用屏幕覆盖并在授予(或不授予)后再次启用自身来避免这种情况。

他们是如何做到这一点的,我该如何重现它?

我找不到任何与此相关的回调或广播。

【问题讨论】:

    标签: android facebook-messenger runtime-permissions


    【解决方案1】:

    这似乎只是一个配置问题,因为它会在正确的配置下自动运行。

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                PixelFormat.RGBA_8888);
    

    以前我使用 TYPE_SYSTEM_OVERLAY,但也玩过 TYPE_SYSTEM_ALERT。这给了我一些问题,即它不会被触摸,也不会“躲避”许可请求。或者它是可触摸的,但阻止屏幕键盘。

    使用此配置,视图是可触摸的,屏幕键盘可以工作,并且在请求权限时会自动隐藏和显示覆盖视图,从而避免可怕的屏幕覆盖检测消息。

    【讨论】:

      猜你喜欢
      • 2017-02-03
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 2017-05-23
      • 2017-09-24
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      相关资源
      最近更新 更多