【问题标题】:Reauthenticate on restart - Android重新启动时重新验证 - Android
【发布时间】:2012-06-21 18:08:23
【问题描述】:

每次调用 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 被显示,但是当它完成时,第一个 Activity 的 onRestart 被再次调用,LoginActivity 被再次打开。

我该如何处理?

【问题讨论】:

  • 应该有一些变量来让用户通过身份验证...。意味着一些像它的会话是有效的?
  • Dheeresh,有一个标志表明它,但客户端希望用户完全重新验证 onRestart。
  • 使用startActivityForResult,在打开LoginActivity之前调用onActivityResult(就在onRestart之后)
  • 当前活动是否有启动模式单实例?

标签: android android-activity lifecycle android-lifecycle activity-lifecycle


【解决方案1】:

好吧,我用这个来解决它:

    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;
    }

嗯,这不是我所期望的,但可以工作,我希望有人找到更好的解决方案。导致 onActivityResult 后 onRestart 不断被调用。

【讨论】:

    【解决方案2】:

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

    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()
    

    【讨论】:

    • 嗯,这应该可以。但这是一个丑陋的解决方案,我使用了另一个(也不好)
    • 我回答了这个问题,这就是解决方案
    • 我还建议在此之前的评论中,但您说“使用 startActivityForResult,在打开 LoginActivity 之前调用 onActivityResult(就在 onRestart 之后)”:(
    • 他们做到了,但没有 NEW_TASK 他们没有 ^^
    猜你喜欢
    • 1970-01-01
    • 2014-03-30
    • 2020-01-21
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    相关资源
    最近更新 更多