2013-05-22 91 views
1

我有一个使用选项卡组活动的应用程序。所有工作都很好,这些标签可以自己打开每个活动,但是当用户注销时,我的麻烦即将到来。我有一个确认用户想要注销的对话框,当他们单击YES时,它会向会话服务器端的URL发送一个http请求,清除storepreferences中的一些变量,然后启动登录活动。这一切都很好,但是当用户在登录界面时,如果他们回来了,他们就会将他们带回到他们登录前的活动中。我试着添加诸如FLAG_ACTIVITY_CLEAR_TOP,FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS,FLAG_ACTIVITY_NO_HISTORY之类的标志,它们都不起作用,它们仍然可以回击并且执行之前的活动。所以我已经重写了登录屏幕上的onBackPressed方法,而不是将应用程序发送到后台(moveTaskToBack(true))。这似乎工作,当我回到主屏幕,但如果我点击我的应用程序的图标,它不恢复在我预期的登录屏幕,但在用户注销之前的活动。任何关于我可以尝试如何在用户注销时这样做的想法,它会清除以前的所有活动,并向我们显示登录活动而无法返回?预先感谢您的任何帮助!!!TabGroupActivity android应用程序 - 注销后防止返回

回答

1

如果你的最低目标是蜂窝或更高,这是非常容易的。如果你的最低限度更低,它会稍微复杂一些。使用蜂窝,你可以添加几个标志的意图,它工作正常。在较低的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; 
    } 
    //... 
} 
+0

这似乎工作到目前为止,虽然有时应用程序完全关闭,而不是返回到登录屏幕。标记为现在被接受,直到我找到更好的解决方案。谢谢詹姆斯的帮助! – Phil

+0

我不明白这是如何完全关闭应用程序的。在所有场景中,您都将开始一个新的“LoginActivity”。 –

+0

詹姆斯,你的答案肯定是正确的。包含我的tabhost的主类在onDestory()方法中有额外的代码,它正在杀死该应用程序。删除,它是完美的工作。感谢您的帮助!!! – Phil

0

尝试覆盖回压法,一件让他走了出来,当点击后退按钮:

@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" 
+0

尝试这两个选项,不幸的是它仍然在做同样的事情。当我按回登录屏幕时,它会按预期进入主屏幕,但当我点击我的应用程序图标重新启动时,它会在用户注销之前恢复。 – Phil

+0

你确实添加了noHistory到你的LoginActivity? –

+0

是的,但它仍然在上一次活动中恢复。如果您有任何其他想法,我可以尝试。感谢您的帮助!! – Phil

相关问题