所以这就是问题:
我正在尝试创建一个设备管理应用,当用户尝试禁用该应用的管理功能时,系统会提示他输入密码,如果他输入的密码不正确,该应用会保留管理员权限。
我见过一个名为AppLock的应用就是这样做的,效果很好!我已尝试按照this SO question中的建议从onDisableRequested()方法锁定屏幕,但管理员应用仍被禁用。
我假设当用户尝试以管理员身份禁用应用时,AppLock会使用密码活动锁定屏幕,但我不明白如何阻止应用在错误的密码上被禁用,因为该应用是在密码活动启动时已经处于禁用状态。如果密码不正确,密码活动中是否有挂钩来暂停某些进程?
我也对如何实现AppLock正在使用的自定义密码锁定屏幕感到困惑。如何使用自定义密码锁定屏幕暂时更改锁定屏幕类型,然后恢复为用户的原始锁定屏幕类型?
这些是其他一些与我的问题类似的问题:
答案 0 :(得分:0)
迟了几年,但我遇到了同样的问题并且能够解决它。也许OP不需要答案,但其他人 - 比如我 - 可能会在寻找解决方案时偶然发现。
请注意,此方法仅在用户无法解锁屏幕时才有效。
您需要做的就是在DeviceAdminReceiver的onDisableRequested方法中锁定屏幕,以便用户输入密码进行解锁。当然,这仅在手机具有某种形式的屏幕锁定(针脚,密码,指纹......)时才有效。警惕智能锁。
请记住,此方法旨在显示警告,说明用户不应禁用权限的原因。 如果返回null(默认值为super),则不会显示任何内容,并且无论如何都会禁用该权限。因此,如果我们返回任何文本,则会显示包含该文本以及ok和取消按钮的对话框显示。
如果您将其与屏幕锁定结合使用,如下所示:
public CharSequence onDisableRequested(Context context, Intent intent) {
DevicePolicyManager deviceManger = (DevicePolicyManager)context.getSystemService(
Context.DEVICE_POLICY_SERVICE);
deviceManger.lockNow();
return "Your warning";
}
当用户尝试禁用该权限时,屏幕将关闭,当他们解锁屏幕时,他们需要输入密码。一旦他们这样做,他们会看到一个带有“你的警告”,一个取消按钮和一个确定按钮的对话框。只有当他们按下确定时才会禁用该权限。