安卓移动控制



我不想做广告,但我的应用程序行为的示例应用程序是ESET防病毒软件。

我的应用程序的一个请求功能是卸载需要密码。我将我的应用程序添加到设备管理员列表,但现在无法卸载它。但是您可以将停用应用程序作为管理员设备。当您转到"设置">"位置和安全">选择设备管理员,然后尝试停用ESET Security,它将启动活动(我猜来自DeviceAdminReceiver.onDisableRequest()),该活动正在等待密码并且您的手机已锁定。主页按钮,后退按钮甚至关闭按钮都没有反应=>

主页,返回,关闭和相机按钮怎么可能没有反应?

编辑 - 删除第二个问题(在我从手机中取出电池后 - ESET 也不是设备管理员)

谢谢你的想法。

好的

,对不起ESET,但这个功能看起来很有趣,所以我看了一下反编译的源代码:)

基本工作流程如下:

  • DeviceAdminReceivercom.eset.ems.antitheft.receiver.AdminReceiver子类注册用于广播操作DEVICE_ADMIN_ENABLEDDEVICE_ADMIN_DISABLED
  • 禁用设备管理员时com.eset.ems.antitheft.receiver.AdminReceiver.onDisabled()调用
  • com.eset.ems.antitheft.LockActivityAdminReceiver.onDisabled()开始
  • LockActivity com.eset.ems.antitheft.LockingDialog显示了最多阻塞魔法发生的地方

至于Home和其他按钮块防病毒软件做以下技巧 - 它使用来自Android内部的ActivityManagerNative。为了使LockActivity保持在所有其他活动的顶部,它启动了一个线程,该线程使用LockActivity任务ID持续调用ActivityManagerNative.moveTaskToFront()。 在 API 级别 10 之前,反射用于访问 ActivityManager 类中的隐藏moveTaskToFront(),在 API 10 之后,它仅使用 Android 代码库中的ActivityManagerNative代码来访问它。此外,LockActivityLockingDialog多次调用ActivityManagerNative.closeSystemDialogs()方法。可能这样做是为了取消长按电源按钮后出现的系统对话框。

至于停止执行DeviceAdminReceiver.onDisableRequested实际上我在代码中没有注意到它有什么特别之处。它仅在禁用设备管理员后启动活动,仅此而已。在我的手机上,我取出电池后,管理员被禁用。

最新更新