TabGroupActivity Android应用程序 - 退出后阻止返回

时间:2013-05-22 13:36:09

标签: android

我有一个使用标签组活动的应用。一切正常,标签打开每个活动本身的方式,但是当用户退出时我的麻烦来了。我有一个确认用户想要注销的对话框,当他们单击YES时,会向URL发送一个http请求,该请求会终止会话服务器端,从商店优先选择中清除一些变量,然后启动Login活动。这一切都很有效,但是当用户在此时处于登录屏幕时,如果他们回击它会将他们带回到他们登录之前所处的活动。我已经尝试添加FLAG_ACTIVITY_CLEAR_TOP,FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS,FLAG_ACTIVITY_NO_HISTORY等标志,但似乎没有工作,他们仍然可以回击并进入上一个活动。所以我在登录屏幕上覆盖了onBackPressed方法,使其将应用程序发送到后台(moveTaskToBack(true))。这似乎工作,当我回击它进入主屏幕,但如果我点击我的应用程序的图标,它恢复不在我期望的登录屏幕,但在用户退出之前的活动。当用户退出时,我可以尝试做什么的任何想法,它清除以前的所有活动并向我们提供我的登录活动而无法返回?提前感谢您的帮助!!!

2 个答案:

答案 0 :(得分:1)

如果您的最低目标是Honeycomb或更高,则非常容易。如果您的最低要求较低,则会稍微复杂一些。使用Honeycomb,您可以为意图添加一些标记,并且它可以正常工作。在较低的API级别中,我发现的唯一有保证的方法是使用Intent.FLAG_ACTIVITY_CLEAR_TOP启动活动并让该活动启动您的登录活动,然后完成。

@TargetApi( Build.VERSION_CODES.HONEYCOMB )
private void logout() {

    Intent intent;
    if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {

        intent = new Intent( this, LoginActivity.class );
        intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK );
        startActivity( intent );
        finish();
    }
    else {

        intent = new Intent( this, HomeActivity.class );
        intent.putExtra( "logout", true );
        intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );
        startActivity( intent );
        finish();
    }
}

HomeActivity

@Override
protected void onCreate( Bundle savedInstanceState ) {

    super.onCreate( savedInstanceState );
    boolean logout = getIntent().getBooleanExtra( "logout", false );
    if ( logout ) {
        startActivity( new Intent( this, LoginActivity.class ) );
        finish();
        return;
    }
    //...
}

答案 1 :(得分:0)

尝试覆盖Back Press Method,当它点击后退按钮时它会消失:

@Override
public void onBackPressed() {
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

或者您可以在使用选项nohistory注销到视图后重定向到视图,这可以通过在AndroidManifest上添加此行来进行,其中新的活动注销已定义

android:noHistory="true"