【问题标题】:SYSTEM_ALERT_WINDOW permission from Lux renders parts of our app inoperable来自 Lux 的 SYSTEM_ALERT_WINDOW 权限使我们的应用程序的某些部分无法运行
【发布时间】:2014-03-19 07:49:40
【问题描述】:

几个月来,由于用户抱怨我们的应用程序的主要部分无法交互,我们的应用程序一直受到差评。我们的应用程序使用支持库并有一个操作栏。根据这些用户的说法,操作栏是应用程序中唯一响应用户触摸的部分。操作栏下方的所有内容(除了 android home、back 等按钮)都没有响应。

在我们尝试重现该问题时遇到了很多麻烦后,我们终于发现安装应用程序Lux 会导致此行为。安装 Lux 后,唯一响应用户触摸的是操作栏。

查看 Lux 的权限,我看到了:

其他应用程序用户界面
覆盖其他应用

查了一下,对应这个android权限:

android.permission.SYSTEM_ALERT_WINDOW

用户已经确认 Lux 应用程序是导致问题的原因。

我的问题是,如何在不告诉用户卸载 Lux 的情况下解决这个问题?这是安卓的bug,还是我们的?我们可以做些什么来使我们的应用程序无响应,而其他应用程序则不会?

我想我的下一步是向 Lux 团队发送一封电子邮件,看看他们是否知道导致这种情况的原因(以及我们自己的调查)。我的直觉是也向 Android 团队发送电子邮件,因为在我看来,任何外部应用程序都不应该能够如此显着地影响另一个人的行为。

【问题讨论】:

  • 出于好奇,什么没有发生?你没有收到触摸事件吗?
  • @GabeSechan,我刚刚在我们的活动中覆盖了onTouchEvent(),我可以确认断点正在被击中(我们正在获取触摸事件,但它们并没有传播给孩子们意见)。我现在正在测试onInterceptTouchEvent 的自定义视图对象。
  • 你有没有确定 Lux 做了什么导致了这个?我已经测试了一些应用程序,其中大多数都可以正常工作。我发现的唯一破坏性应用是 Lux 和 GridWichterle (play.google.com/store/apps/…)。

标签: android android-support-library


【解决方案1】:

您是否有机会使用具有android:filterTouchesWhenObscured 属性的视图?当设置为 true 时,我相信这可能会导致您的问题。

例如,在 XML 中,它看起来像:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:filterTouchesWhenObscured="true"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"/>

删除filterTouchesWhenObscured 行应该没问题。

【讨论】:

  • 就是这样。如此随机和奇怪的错误。看起来操作系统将 lux 叠加层注册为另一个视图,因此过滤器会触及嵌入在抽屉布局中的视图(该属性所在的位置)。
猜你喜欢
  • 2010-12-06
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 2023-03-03
  • 2020-06-11
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多