在我的应用中使用屏幕锁定

Posted

技术标签:

【中文标题】在我的应用中使用屏幕锁定【英文标题】:Use screen lock in my app 【发布时间】:2015-06-09 23:25:33 【问题描述】:

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

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

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

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

【问题讨论】:

你试过this或this或this吗? 那些都在锁定“设备”。我不想完全锁定屏幕。相反,我想在执行任何关键操作之前使用锁作为验证。 (就像在重置手机之前询问密码一样) 简短回答:不,目前没有。 @Mangesh:您确定您标记为已接受的 CommonsWare 的答案实际上是正确的吗?下面还有 agi 的另一个回答说它不是,并且收到了大量的赞成票。我自己无法真正验证,但如果 agi 的答案确实正确,您可能想接受它。 【参考方案1】:

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

首先得到一个Keyguard SystemService:

KeyguardManager km = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);

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

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

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

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

【讨论】:

我在手机中使用指纹,当运行此代码要求输入密码时。你有什么解决办法吗? @CecilPaul 指纹也应该与 PIN 一起使用。您可以在运行 Intent 时在锁定屏幕上看到一个指纹图标。【参考方案2】:

我只是关注 @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();
        
    

【讨论】:

@agi 添加的,这仅适用于 OS Lollipop 及更高版本。 在 kotlin 中添加 onActivityResult 在 Intent 之后添加 ?。否则数据可能为空,它会抛出异常。 onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) .... @AbhijitKurane 每次打开我的应用都想询问密码时该怎么办?想输入密码。我在onResume方法中写了上面的代码,但它不起作用并进入无限循环

以上是关于在我的应用中使用屏幕锁定的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 上使用 swift 防止我的​​应用程序屏幕锁定

如何在应用程序启动时显示锁定屏幕?

如何在IOS上使用swift防止我的应用程序上的屏幕锁定

使用人脸 ID 从锁定屏幕打开时应用程序被阻止

iBeacon 技术将位置感知应用程序访问权限带入锁定屏幕

当我点击信使时 applock 如何出现在我的信使屏幕上