有一类 Android 应用程序可以在某些用户指定的应用程序上启用密码保护;例如,Android Protector .我需要从不同的方向来解决这个问题。
是否可以创建一个阻止所有 Activity 启动的应用程序,除非它们在预定义的白名单中?这种方法会产生意想不到的后果吗?我熟悉 Android 基础知识并编写了一些相当简单的应用程序,但我仍在尝试弄清楚这些“Protector”应用程序如何正确拦截启动 Intent 。有人介意给我简要介绍一下执行此操作的正确方法吗?
基本问题是我们有一个通用的 Android 手机需要锁定,以便我们的客户(仅限内部)可以访问我们的自定义应用程序而不能玩“极品飞车”等。我想删除运营商过时软件,但生根设备似乎是一个令人头疼的维护问题。我们希望每部手机的设置都像安装一些自定义应用程序一样简单。
最佳答案
编辑以详细说明解决方案
概览
我的简单解决方案是向我的应用程序添加新服务和 Activity 。该服务使用 Handler
和 postDelayed
持续调度监控任务。监控任务检查当前 Activity 是否在白名单中。获取当前正在运行的 Activity 涉及 ActivityManager
并调用 getRunningTasks
.完成检查后,监控任务会自行安排在 X 秒(在我的例子中为 1 秒)后再次运行。
如果顶部的 Activity 不在白名单中,我们将启动阻止 Activity ,该 Activity 会弹出当前正在运行的任何 Activity 。阻止 Activity 的关键部分是它覆盖了 onBackPressed
,防止用户简单地返回到“不良” Activity 。按 Home 键是(据我所知)离开此屏幕的唯一方法。
提示
- 在锁定屏幕中构建后门。例如,我的解决方案会在长按返回键时提示输入密码。输入正确的密码后,监控服务会休眠 5 分钟,以便我可以进行管理工作
- 显示被阻止 Activity 的名称
- 在开启此功能之前收集一份好的白名单!您绝对应该列入白名单的 Activity :启动器、软件包安装程序、您自己的应用程序(显然)、浏览器(如果您的应用程序具有基于网络的组件)
我不喜欢我的服务在后台不断循环;这似乎很浪费。我想找到一些方法来在启动新任务时得到通知,但我找不到办法做到这一点。我的特定监控时间段和我的特定手机的电池使用量是可以接受的;尽管您在自己采用之前绝对应该进行测试。
关于android - 自动阻止应用程序从启动器启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5169279/