android - 自动阻止应用程序从启动器启动

标签 android launcher android-launcher

有一类 Android 应用程序可以在某些用户指定的应用程序上启用密码保护;例如,Android Protector .我需要从不同的方向来解决这个问题。

是否可以创建一个阻止所有 Activity 启动的应用程序,除非它们在预定义的白名单中?这种方法会产生意想不到的后果吗?我熟悉 Android 基础知识并编写了一些相当简单的应用程序,但我仍在尝试弄清楚这些“Protector”应用程序如何正确拦截启动 Intent 。有人介意给我简要介绍一下执行此操作的正确方法吗?

基本问题是我们有一个通用的 Android 手机需要锁定,以便我们的客户(仅限内部)可以访问我们的自定义应用程序而不能玩“极品飞车”等。我想删除运营商过时软件,但生根设备似乎是一个令人头疼的维护问题。我们希望每部手机的设置都像安装一些自定义应用程序一样简单。

最佳答案

编辑以详细说明解决方案

概览

我的简单解决方案是向我的应用程序添加新服务和 Activity 。该服务使用 HandlerpostDelayed持续调度监控任务。监控任务检查当前 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/

相关文章:

android - 如何在 android oreo(8.0) 上将应用程序启动器图标添加到主屏幕?

sqlite - 访问 Lollipop 上的启动器数据库

android - 如何阻止在 Android 设备上启动其他应用程序

android - 单击标记时清空信息窗口

Android 编辑文本 : How to create an empty bullet paragraph by BulletSpan?

java - 异常处理异步线程队列 异常处理异步线程队列java.lang.UnsupportedOperationException

java - 为什么 resolveInfo.loadLabel () 如此慢得离谱?

android - 按下按钮时如何隐藏/显示元素?

android - 使用 Android 将启动器和 Activity 图标分开

启动默认启动器的 Android 自定义启动器