我不想做广告,但是针对我的应用程序行为的示例应用程序是ESET防病毒软件。
我的应用程序要求提供的一项功能是卸载需要密码。我将我的应用添加到设备管理员列表中,现在无法将其卸载。但是您可以将Deactive应用程序用作管理设备。当您转到“设置”>“位置和安全性”>“选择设备管理员”,然后尝试停用ESET Security时,它会启动 Activity (我从DeviceAdminReceiver.onDisableRequested()中猜测),该 Activity 正在等待密码,并且您的手机已被锁定。主页按钮,后退按钮甚至“关机”按钮都没有反应=>
“返回”,“关闭”,“关闭”和“摄像头”按钮不 react 怎么可能?
编辑-第二个问题已删除
(从手机中取出电池后-ESET也不是设备管理员)
谢谢你的想法。
最佳答案
好的,对不起ESET,但是此功能看起来非常有趣,因此我看了反编译的源代码:)
基本工作流程如下:com.eset.ems.antitheft.receiver.AdminReceiver
的
DeviceAdminReceiver
子类被注册用于广播操作DEVICE_ADMIN_ENABLED
和DEVICE_ADMIN_DISABLED
com.eset.ems.antitheft.receiver.AdminReceiver.onDisabled()
称为com.eset.ems.antitheft.LockActivity
从AdminReceiver.onDisabled()
开始LockActivity
显示最阻塞魔术发生的com.eset.ems.antitheft.LockingDialog
至于Home和其他按钮阻止杀毒软件,请执行以下操作-它使用Android内部的ActivityManagerNative。为了使
LockActivity
处于所有其他 Activity 的顶部,它启动了一个线程,该线程不断地使用ActivityManagerNative.moveTaskToFront()
任务ID调用LockActivity
。在API级别10之前,反射用于访问ActivityManager类中的隐藏moveTaskToFront()
,而在API 10之后,它仅使用Android代码库中的ActivityManagerNative
代码进行访问。LockActivity
和LockingDialog
也会多次调用ActivityManagerNative.closeSystemDialogs()
方法。可能这样做是为了取消长按电源按钮后出现的系统对话框。至于停止执行
DeviceAdminReceiver.onDisableRequested
实际上,我在代码中没有发现任何特别之处。仅在禁用设备管理员后才开始 Activity ,仅此而已。在我取出电池后,在我的电话设备上,管理员已被禁用。