如何在Android 5.0(API 21)之前确认设备凭证?

时间:2016-01-28 21:57:54

标签: java android

我有一个用例需要用户确认设备凭证,而KeyguardManager中的createConfirmDeviceCredentialIntent方法完全符合我的需要。但是,自API 21以来添加了此方法。(reference link)那么如何在Android 5.0之前实现相同的功能呢?我也想支持Android 4.X等版本。

谢谢!

2 个答案:

答案 0 :(得分:4)

在21级之前,这在非root设备上肯定是不可能的,并且没有其他常规权限。

如果可以要求额外的管理员权限,则可以通过实施DeviceAdminReceiver.onPasswordSucceeded来更加努力地模拟凭证确认松散。当密码成功时,锁定屏幕执行所需的操作。这可能会变得相对复杂,因为并不总是接收到动作(仅在状态发生变化时),需要保持最后的成功,与接收者通信等等。

作为旁注,请仔细检查用例和您的设计,在大多数情况下,当使用createConfirmDeviceCredentialIntent时,实际上并不需要它,其他设计选择可能无需使用它。

最好提供您要保护的确切内容的详细信息。如果是未经授权的人意外访问设备的情况,并且例如从某些oauth服务生成永久令牌,则通过相同的服务登录流程重新授权或存储一些原始凭证的hmac可能是合理的。与令牌一起然后提示并重新验证凭据,而不是提示设备凭据。或者,如果这对用例足够,您可以使用google login授权访问您的应用/令牌,并验证存储令牌的Google用户是否相同。

答案 1 :(得分:1)

我在博客文章中描述了这种情况的最佳答案:

Android Secrets

但是,它会重新创建私有的系统类,并调用非公开的AOSP代码。我的赏金是为了更好的答案,不需要在项目中明确的类命名。也许Smart Lock或其他很棒的安全库可用于我需要的向后兼容性。