Android 检查是否设置了锁屏

2023-11-22

我需要检查锁屏是否有 Pin 码或更安全的东西(密码、指纹等)。我能够检查是否有 PIN、密码或图案。

KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
    return keyguardManager.isKeyguardSecure();

我的问题是我无法检测锁屏是否是图案或更低的东西。我试过这个:

        int lockPatternEnable = Settings.Secure.getInt(cr, Settings.Secure.LOCK_PATTERN_ENABLED);

但它已被弃用并引发错误。我也尝试过这个:

            long mode2 = Settings.Secure.getLong(contentResolver, "lockscreen.password_type");

但这也以 SecurityException 结束。

有什么方法可以检测锁屏是否有 PIN(或更高级别)或者是否有锁定图案或更低级别的内容? KeyguardManager 在这方面对我来说没有用:/

任何帮助表示赞赏! 谢谢!

/edit

第一个的错误是:

               Caused by: java.lang.SecurityException: Settings.Secure.lock_pattern_autolock is deprecated and no longer accessible. See API documentation for potential replacements.

第二个例外是: W/System.err: android.provider.Settings$SettingNotFoundException: lockscreen.password_type

当您使用带有 Marshmallow 或更高版本的设备时,才会出现该错误(https://developer.android.com/reference/android/provider/Settings.Secure.html)


我正在这样做: (灵感来自https://gist.github.com/doridori/54c32c66ef4f4e34300f)

public boolean isDeviceScreenLocked() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        return isDeviceLocked();
    } else {
        return isPatternSet() || isPassOrPinSet();
    }
}

/**
 * @return true if pattern set, false if not (or if an issue when checking)
 */
private boolean isPatternSet() {
    ContentResolver cr = context.getContentResolver();
    try {
        int lockPatternEnable = Settings.Secure.getInt(cr, Settings.Secure.LOCK_PATTERN_ENABLED);
        return lockPatternEnable == 1;
    } catch (Settings.SettingNotFoundException e) {
        return false;
    }
}

/**
 * @return true if pass or pin set
 */
private boolean isPassOrPinSet() {
    KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); //api 16+
    return keyguardManager.isKeyguardSecure();
}

/**
 * @return true if pass or pin or pattern locks screen
 */
@TargetApi(23)
private boolean isDeviceLocked() {
    KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); //api 23+
    return keyguardManager.isDeviceSecure();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 检查是否设置了锁屏 的相关文章

随机推荐