android - 当我检测到某个事件时如何让我的应用弹出?
问题描述
注意:这最初是在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
.
解决方案
我能够缩小使用的确切权限范围——使用 ADB OTG(我附近没有电脑,所以我使用了备用像素)我做到了appops set com.kaspersky.safekids BIND_ACCESSIBILITY_SERVICE ignore
(我相信deny
也会工作)。重新启动它,不再弹出。更改ignore
为allow
,然后重新启动,它再次工作。
推荐阅读
- python - 在 Linux 服务器上运行烧瓶应用程序时连接失败
- swift - Agora RTM 登录出现超时错误代码 9?
- apache - 将 Apache SSI 与 SPA 路由结合使用
- bash - 用于从键值过滤值的 Bash 脚本
- python - 创建一个抽象类属性装饰器
- javascript - Javascript 警报延迟 jquery .remove 操作
- java - java中的url编码有撇号和空格的问题
- javascript - JavaScript Express - 如何接受动态表单请求
- excel - Excel排序时间问题
- list - 在 Erlang 中,内置的 head 和 tail 函数在哪里?