23

是否可以使用用户为手机设置的默认安全设置作为我的应用程序的锁定或登录机制?我的意思是,当我们重置手机时,它会要求输入手机密码或图案。

我可以使用用户设置的默认android密码或模式登录我的应用程序吗?

我的目标是绕过开发工作并使用一些标准的身份验证方式,而不会让用户记住另一个新密码。

注意:我知道我可以以编程方式锁定屏幕。但相反,我想在执行任何关键操作之前使用锁作为验证。(就像设置在重置手机之前要求输入密码一样。)

4

2 回答 2

30

实际上,有一个使用KeyguardManager的 API 。

首先获取 Keyguard SystemService:

KeyguardManager km = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);

然后使用以下命令请求身份验证意图:

Intent i = km.createConfirmDeviceCredentialIntent(title,description);

使用启动此意图startActivityForResult(Intent, int)并检查RESULT_OK用户是否成功完成挑战。

这适用于 API 级别 21。以前的版本可能适用于KeyguardLock.

于 2015-04-15T12:36:38.827 回答
18

我只是在关注@agi并进行了一些改进,

    public class MainActivity extends AppCompatActivity {
    private static int CODE_AUTHENTICATION_VERIFICATION=241;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        KeyguardManager km = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);
        if(km.isKeyguardSecure()) {

            Intent i = km.createConfirmDeviceCredentialIntent("Authentication required", "password");
            startActivityForResult(i, CODE_AUTHENTICATION_VERIFICATION);
        }
        else
            Toast.makeText(this, "No any security setup done by user(pattern or password or pin or fingerprint", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==RESULT_OK && requestCode==CODE_AUTHENTICATION_VERIFICATION)
        {
            Toast.makeText(this, "Success: Verified user's identity", Toast.LENGTH_SHORT).show();
        }
        else
        {
            Toast.makeText(this, "Failure: Unable to verify user's identity", Toast.LENGTH_SHORT).show();
        }
    }
}
于 2017-11-08T05:33:45.697 回答