Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重新启动时重新验证-Android_Android_Android Activity_Lifecycle_Android Lifecycle_Activity Lifecycle - Fatal编程技术网

重新启动时重新验证-Android

重新启动时重新验证-Android,android,android-activity,lifecycle,android-lifecycle,activity-lifecycle,Android,Android Activity,Lifecycle,Android Lifecycle,Activity Lifecycle,我需要在每次调用onRestart时重新验证用户凭据(通常这意味着用户已锁定并解锁屏幕或将其置于后台,然后返回到屏幕) 所以我这样做了: @Override protected void onRestart() { super.onRestart(); Intent intent = new Intent(this, LoginActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); int

我需要在每次调用onRestart时重新验证用户凭据(通常这意味着用户已锁定并解锁屏幕或将其置于后台,然后返回到屏幕)

所以我这样做了:

@Override
protected void onRestart() {
    super.onRestart();

    Intent intent = new Intent(this, LoginActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setAction(LoginActivity.REAUTHENTICATE);
    startActivity(intent);
}
这样做可以显示LoginActivity,但当它完成onRestart时,会再次调用第一个活动,并再次打开LoginActivity


我该如何处理呢?

在从任何人那里得到一个好的解决方案/建议之前,都可以尝试一下

1- Put a boolean variable in shared pref named AuthentacationNeeded
2- get that in OnRestart with default value true 
3-if value is true then only startActivity
4- put that variable true in onpuase 

in Login activity 
4-   put that variable false Before finish()

我用这个来解决这个问题:

    private static final int REAUTHENTICATE = 80;

    private boolean authenticated;

    @Override
    public void onRestart() {
        if(authenticated)
            return;

        Intent intent = new Intent(this, LoginActivity.class);
        intent.setAction(LoginActivity.REAUTHENTICATE);
        startActivityForResult(intent, REAUTHENTICATE);
    }

    @Override
    public void onStop() {
        authenticated = false;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == REAUTHENTICATE)
            authenticated = true;
    }

嗯,这不是我所期望的,但很有效,我希望有人能找到更好的解决方案。导致onRestart在onActivityResult之后继续被调用。

应该有一些变量来获取用户是否已通过身份验证…意味着某些变量好像它的会话有效?Dheeresh,有一个标志指示它,但客户端希望用户在重新启动时完全重新验证。使用startActivityForResult,在打开LoginActivity之前调用onActivityResult(就在onRestart之后)当前活动是否具有启动模式单个实例?好的,这应该可以工作。但这是一个丑陋的解决方案,我使用了另一个解决方案(也不好)我回答了这个问题,这就是解决方案我在之前的评论中也建议,但你说“使用startActivityForResult,onActivityResult在打开LoginActivity之前(在重新启动之后)被调用):(他们这样做了,但没有新的任务,他们不会这么做)^^