1

我的应用程序主要用途是覆盖,覆盖是从服务运行的。

Android 安全添加了漂亮的“检测到屏幕覆盖”

当用户尝试更改权限时,我想避免“检测到屏幕覆盖”。所以...我添加了一个 AccessiblityService 来检测:

if ( event.getPackageName().equals("com.google.android.packageinstaller") ){
    stopService(myServiceIntent);
}

但是,即使是现在,我也看到此消息弹出。(当我的服务停止时......)。

我看到Twilight毫无问题地做到了。

我错过了什么?

ps - 我也尝试过构建一个签名的 apk,但看到了完全相同的行为。

4

2 回答 2

1

看来我已经能够解决这个问题了。

a) stopService 不能保证您的服务将被停止。如此处所述:

在删除所有这些绑定之前,它不会被销毁。有关服务生命周期的更多详细信息,请参阅 > 服务文档。

b) 我能够通过发送名为 stopSelf() 的意图来终止我的服务。但是进程终止/启动可能很慢。

c) 最佳分辨率:看来 Android 会检查视图可见性。无需终止服务或做任何更复杂的事情。

我正在这样做的当前方式:-AccessibilityService(已被我的应用程序使用)监控“com.google.android.packageinstaller”,尽管它可以细化为类:“com.android.packageinstaller.permission.ui.ManagePermissionsActivity”

  • 一旦在这个类中检测到,我们将 Intent 发送给“duck”,当我们离开时,我们发送另一个我们重新打开的 Intent。

  • 该服务通过以下方式处理这些调用:

    [ourView].setVisibility(View.INVISIBLE); // when permission settings shown

    [ourView].setVisibility(View.VISIBLE); // when normal flow

于 2016-11-10T15:27:56.473 回答
0

只要 Android 6.x 在某些设备上出现错误,这些设备会无缘无故地显示此“覆盖警报”(根据我的分析数据,在 2% 到 5% 的设备上),最好的解决方案是通过以下方式避免整个许可过程将 targetSdk 定义为 22。请注意,您不能将目标 sdk 降级为新版本,否则当用户更新需要卸载/安装应用程序时,这将导致 INSTALL_FAILED_PERMISSION_DOWNGRADE 错误。

于 2017-06-27T10:47:32.803 回答