Android - 当用户最小化应用程序而不是在活动中移动时使指纹验证无效

问题描述

我有一个应用程序,其中使用指纹锁来保护应用程序不被使用,而无需先使用指纹进行身份验证。 问题是验证只发生在应用程序第一次启动时;所以在第一次启动后,在再次启动应用程序之前不再进行验证, 但是我希望当前验证在应用程序中的不同活动之间移动时有效,但是如果用户最小化应用程序或手机屏幕熄灭时它应该无效,以便用户在最小化后再次验证指纹并重新进入应用程序。

我尝试使用基本活动并覆盖 onPause 和 onResume,但即使在跨活动移动时也会调用这些方法,这不是我想要的。

解决方法

您可能可以使用系统广播意图 ACTION_SCREEN_ONACTION_SCREEN_OFF 和/或 ACTION_USER_PRESENT 来实现您的目标。查看 https://developer.android.com/reference/android/content/Intent 了解更多信息。

为此,请注册为广播接收器以在您的主要活动 onCreate 中接收这些通知,在 onDestroy 中取消注册。您可以使用这些通知来设置指示是否需要身份验证的标志。

示例代码:

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
    .
    .
    .
        // register to receive appropriate events

        IntentFilter intentUserPresent = new IntentFilter(Intent.ACTION_USER_PRESENT);
        intentUserPresent.addAction(Intent.ACTION_USER_PRESENT);
        registerReceiver(userActionReceiver,intentUserPresent);
        
    .
    .
    .
    }
    

    // create a BroadcastReceiver to receive the notifications
    private BroadcastReceiver userActionReceiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context,Intent intent)
        {
            Log.d("MyLog",String.format("MainActivity received broadcaast %s",intent.toString()));

            if (intent.getAction() == Intent.ACTION_USER_PRESENT)
            {
               // set flag indicating re-authentication is needed
            }
        }
    };
    
    @Override
    protected void onDestroy()
    {
        // make sure to un-register the receiver!
        unregisterReceiver(userActionReceiver);
        super.onDestroy();
    }

这不会检测到用户“最小化应用程序”,但不清楚为什么您会认为在这种情况下需要重新进行身份验证。生命周期事件 onStart/onStop 可以检测活动的背景/前景。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...