首页 > 解决方案 > 当我检测到某个事件时如何让我的应用弹出?

问题描述

注意:这最初是在Android Enthusiasts Stack Exchange上发布的,但现在被移到这里,因为它在那里被发现与主题无关

Kaspersky Safe Kids 是一款家长控制应用程序,它有一个功能,每次检测到孩子不应该做的事情时都会弹出(打开应用程序,打开与其设置相关的任何内容,搜索 Google 和 Youtube 上禁止的内容) -- 有趣的是,它不适用于其他基于 Chromium 的浏览器)。我一直在试图弄清楚它如何检测我自己的应用程序的事件,但通常的罪魁祸首,如权限 GET_TASKS 和 READ_LOGS 已被贬低(我正在尝试定位,卡巴斯基在 Android 10+ 上工作)。对于实际的覆盖,我认为它使用了 SYSTEM_ALERT_WINDOW,但在我自己在模拟器中的实验中,当我撤销该权限时,它仍然能够弹出。那么,它是如何工作的,它们(我猜其他类似的控制和生产力应用程序)有哪些权限?

该应用程序是设备管理员,因此可能会发挥作用,但查看设备管理员拥有的权限,它们看起来都不像卡巴斯基拥有的权限。

编辑:在评论中,Mike M. 指出该应用程序使用辅助功能服务(不知道我是怎么错过的),这是有道理的,因为辅助功能允许您做很多事情,包括显示您自己的 UI。巧合的是,对该应用程序本身的评论指出该过程在随机时间结束(虽然不确定是哪个过程),可能是因为它没有被列入白名单。然后我看了一下它的权限,这个很突出:android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. 此权限允许将其列入白名单,以便省电模式不会杀死后台进程。对于可访问性本身,android.permission.BIND_ACCESSIBILITY_SERVICE是用于授予它的权限(为了记录,您必须使用adb shell appops set com.kaspersky.safekids android.permission.BIND_ACCESSIBILITY_SERVICE [allow|ignore|deny],而不是adb shell pm [grant|revoke] com.kaspersky.safekids android.permission.BIND_ACCESSIBILITY_SERVICE(尽管android可能必须用 替换Manifest)作为BIND_ACCESSIBILITY_SERVICE是签名许可。为了完整起见,对于管理员,它是android.permission.BIND_DEVICE_ADMIN.

标签: androidandroid-permissions

解决方案


我能够缩小使用的确切权限范围——使用 ADB OTG(我附近没有电脑,所以我使用了备用像素)我做到了appops set com.kaspersky.safekids BIND_ACCESSIBILITY_SERVICE ignore(我相信deny也会工作)。重新启动它,不再弹出。更改ignoreallow,然后重新启动,它再次工作。


推荐阅读