我有一个用例需要用户确认设备凭证,而KeyguardManager中的createConfirmDeviceCredentialIntent方法完全符合我的需要。但是,自API 21以来添加了此方法。(reference link)那么如何在Android 5.0之前实现相同的功能呢?我也想支持Android 4.X等版本。
谢谢!
答案 0 :(得分:4)
在21级之前,这在非root设备上肯定是不可能的,并且没有其他常规权限。
如果可以要求额外的管理员权限,则可以通过实施DeviceAdminReceiver.onPasswordSucceeded
来更加努力地模拟凭证确认松散。当密码成功时,锁定屏幕执行所需的操作。这可能会变得相对复杂,因为并不总是接收到动作(仅在状态发生变化时),需要保持最后的成功,与接收者通信等等。
作为旁注,请仔细检查用例和您的设计,在大多数情况下,当使用createConfirmDeviceCredentialIntent时,实际上并不需要它,其他设计选择可能无需使用它。
最好提供您要保护的确切内容的详细信息。如果是未经授权的人意外访问设备的情况,并且例如从某些oauth服务生成永久令牌,则通过相同的服务登录流程重新授权或存储一些原始凭证的hmac可能是合理的。与令牌一起然后提示并重新验证凭据,而不是提示设备凭据。或者,如果这对用例足够,您可以使用google login授权访问您的应用/令牌,并验证存储令牌的Google用户是否相同。
答案 1 :(得分:1)
我在博客文章中描述了这种情况的最佳答案:
但是,它会重新创建私有的系统类,并调用非公开的AOSP代码。我的赏金是为了更好的答案,不需要在项目中明确的类命名。也许Smart Lock或其他很棒的安全库可用于我需要的向后兼容性。