【问题标题】:Android - Password Protected Device Admin DisablementAndroid - 密码保护设备管理员禁用
【发布时间】:2014-07-22 19:15:55
【问题描述】:

所以问题来了:

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

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

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

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

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

【问题讨论】:

  • 嗨,你有没有找到任何方法来解决这个问题..
  • 是的,我想出了一些技巧来使这项工作大部分工作,尽管仍有一些错误需要解决。最重要的部分是不要使用“onDisableRequested()”方法作为密码活动的触发器,而是需要一个后台服务来查看顶部活动,并在适当的时候激活密码活动。
  • 你能分享示例源代码来实现吗?

标签: android passwords password-protection device-admin screen-lock


【解决方案1】:

晚了几年,但我遇到了同样的问题并且能够解决它。也许 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";
}

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

【讨论】:

    猜你喜欢
    • 2012-11-07
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2012-05-21
    • 2020-01-30
    相关资源
    最近更新 更多