4

所以这里的问题是:

我正在尝试创建一个设备管理应用程序,当用户尝试禁用该应用程序的管理功能时,系统会提示他输入密码,如果他未能输入正确的密码,该应用程序将保留管理员权限。

我见过一个名为 AppLock 的应用程序就是这样做的,而且效果很好!我已尝试按照此 SO question中的建议从 onDisableRequested() 方法锁定屏幕,但无论如何禁用管理应用程序。

我假设当用户尝试以管理员身份禁用应用程序时,AppLock 会使用密码活动锁定屏幕,但我不明白它如何阻止应用程序因密码错误而被禁用,因为该应用程序已经在启动密码活动时被禁用的过程。如果密码不正确,密码活动中是否存在暂停某些进程的挂钩?

我也对如何实现 AppLock 正在使用的自定义密码锁定屏幕感到困惑。如何使用自定义密码锁屏暂时更改锁屏类型,然后恢复为用户的原始锁屏类型?

这些是与我的问题类似的其他一些 SO 问题:

4

1 回答 1

2

晚了几年,但我遇到了同样的问题并且能够解决它。也许 OP 不需要答案,但其他人——比如我——可能会在寻找解决方案时偶然发现这个问题。

请记住,此方法仅在用户无法解锁屏幕时才有效。

您需要做的就是在 DeviceAdminReceiver 的 onDisableRequested 方法中锁定屏幕,这样用户就必须输入密码才能解锁。当然,这仅在手机具有某种形式的屏幕锁定(密码、密码、指纹……)时才有效。警惕智能锁。

请记住,此方法旨在显示警告,说明用户不应禁用权限的原因。如果返回 null(super 的默认值),则不显示任何内容,并且无论如何都禁用该权限。因此,如果我们返回任何文本,将显示一个包含该文本的对话框以及一个确定和一个取消按钮。

如果你将它与这样的屏幕锁定结合起来:

public CharSequence onDisableRequested(Context context, Intent intent) {
    DevicePolicyManager deviceManger = (DevicePolicyManager)context.getSystemService(
            Context.DEVICE_POLICY_SERVICE);
    deviceManger.lockNow();
    return "Your warning";
}

当用户尝试禁用权限时屏幕将关闭,当他们解锁屏幕时,他们需要输入密码。一旦他们这样做了,他们就会看到一个带有“您的警告”的对话框、一个取消按钮和一个确定按钮。只有当他们按下确定时,权限才会被禁用。

于 2017-03-27T10:43:28.203 回答