onActivityResult和FLAG_ACTIVITY_NEW_TASK:解决方法?

时间:2018-07-03 15:35:56

标签: android android-intent android-activity activity-stack

这是我的情况:我有一系列Activity。我为那些Activity设置了一个超时,如果用户暂时不活动,它将断开用户连接。但是我想将用户重定向到最后一个屏幕,以防他登录

当我断开与用户的连接时,我称之为:

public void restartFromLoginActivity(boolean saveCurrentState, String previousLoggedUserId) {
    Activity currentActivity = getCurrentActivity();
    Intent intent = new Intent(CERHISApplication.this, LoginActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

    if(saveCurrentState && currentActivity != null){
        Bundle extras = new Bundle();
        extras.putString(ApplicationController.KEY_PREVIOUSLY_LOGGED_USER_ID, previousLoggedUserId);
        intent.putExtras(extras);
        currentActivity.startActivityForResult(intent, ApplicationController.RC_LOGIN);
    }
    else
        startActivity(intent);

    if(currentActivity != null)
        currentActivity.finish();
}

然后在我的LoginActivity中检查userId是否相同,如果是,我尝试通过onActivityResult来调用重定向用户,如下所示:

if (getCallingActivity() != null && userId.equals(previouslyLoggedUserId)) 
    setResult(RESULT_OK);
else
    ApplicationController.startHomeActivity(this);

但这不起作用,因为我将标志FLAG_ACTIVITY_NEW_TASK设置为自己的意图。如文档中所述:

  

当调用者从正在启动的活动中请求结果时,不能使用此标志。

据我了解,Activity只能从任务中的Activity接收结果。但是我需要设置此标志,否则用户可以通过按“后退”按钮返回Activity stack

它们是将堆栈的清除组合在一起以避免用户再次登录之前返回活动和避免 redirect 行为的任何解决方法介绍?

欢迎提出任何想法,谢谢。

1 个答案:

答案 0 :(得分:0)

使用resultreceiver可能适合您的设计