如何绕过“滑动解锁”屏幕。

4
我正在实现一个自定义的“滑动解锁”屏幕。
如果在设置中“屏幕锁定”为“滑动”,我的应用程序可以正常工作。 在我的自定义“滑动解锁”屏幕中,用户滑动以解锁,通过在我的活动中添加下面的代码来直接解锁手机并进入主屏幕:
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
当在设置中“屏幕锁定”为“PIN”时,问题就出现了,上述代码不起作用。我期望的是它将绕过默认的“滑动解锁”屏幕并进入“PIN输入”屏幕,这样用户就不必滑动两次才能输入他们的PIN码。
更新:
看起来我们无法避免默认的“滑动解锁”屏幕,所以我尝试另一种方法,即使用指纹。
@Override public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) { mCallback.onAuthenticated(); }

目前,我需要两次触摸传感器,第一次是用来取消锁屏,第二次是用来打开默认锁屏。下一个应用程序只需一次触摸即可取消2个锁屏,因此我认为这是可能的。


1
成为供应商/系统应用程序。 - Shark
1
因为下一次滑动解锁(使用PIN码)是基于系统的,而在某些其他设备上可能没有第二屏幕,只有PIN码,所以您需要系统权限。 - GensaGames
@GensaGames 这意味着非root设备无法实现吗? - thanhbinh84
1
在查看了GravityBox的实现后,我得出结论,实际上没有办法在没有root权限的情况下实现这一点。参考https://github.com/GravityBox/GravityBox/blob/marshmallow/src/com/ceco/marshmallow/gravitybox/ModLockscreen.java,其中设置键PREF_KEY_LOCKSCREEN_DIRECT_UNLOCK。 - F43nd1r
1个回答

2

不需要听指纹,只需在设备解锁时注册并取消锁屏:

void registerUnlockReceiver() {
    IntentFilter i = new IntentFilter(Intent.ACTION_USER_PRESENT);
    registerReceiver(mUserUnlockedReceiver , i);
}

BroadcastReceiver mUserUnlockedReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        unlockAndExit(false);
    }
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接