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

我的应用程序要求提供的一项功能是卸载需要密码。我将我的应用添加到设备管理员列表中,现在无法将其卸载。但是您可以将Deactive应用程序用作管理设备。当您转到“设置”>“位置和安全性”>“选择设备管理员”,然后尝试停用ESET Security时,它会启动 Activity (我从DeviceAdminReceiver.onDisableRequested()中猜测),该 Activity 正在等待密码,并且您的手机已被锁定。主页按钮,后退按钮甚至“关机”按钮都没有反应=>

“返回”,“关闭”,“关闭”和“摄像头”按钮不 react 怎么可能?

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

谢谢你的想法。

最佳答案

好的,对不起ESET,但是此功能看起来非常有趣,因此我看了反编译的源代码:)

基本工作流程如下:
com.eset.ems.antitheft.receiver.AdminReceiver

  • DeviceAdminReceiver子类被注册用于广播操作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处于所有其他 Activity 的顶部,它启动了一个线程,该线程不断地使用ActivityManagerNative.moveTaskToFront()任务ID调用LockActivity。在API级别10之前,反射用于访问ActivityManager类中的隐藏moveTaskToFront(),而在API 10之后,它仅使用Android代码库中的ActivityManagerNative代码进行访问。LockActivityLockingDialog也会多次调用ActivityManagerNative.closeSystemDialogs()方法。可能这样做是为了取消长按电源按钮后出现的系统对话框。

    至于停止执行DeviceAdminReceiver.onDisableRequested实际上,我在代码中没有发现任何特别之处。仅在禁用设备管理员后才开始 Activity ,仅此而已。在我取出电池后,在我的电话设备上,管理员已被禁用。

    09-11 17:35