2016-07-14 75 views
5

我的应用程序旨在仅允许登录的用户访问活动。如果用户注销,则将共享首选项布尔值isLogged in设置为false,并且用户不应访问除LoginActivity之外的其余活动。如何关闭所有活动并退出应用程序

但是,我可以通过按后退按钮访问所有以前打开的活动。

我会用finish();同时打开的每个活动,但后来我想用户仍然使用后退按钮,而他们已经登录。

我试图从其他类似的问题解决方案,如

Intent intent = new Intent(getApplicationContext(), LoginActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("EXIT", true); 
startActivity(intent); 

和我LoginActivity的onCreate()我加入

if (getIntent().getBooleanExtra("EXIT", false)) { 
     finish(); 
    } 

当我按下注销选项,在p而不是先前的活动。

有什么建议请帮帮我吗?

+0

试试这个.. http://stackoverflow.com/a/38268217/6334037 – user392117

回答

4

你应该使用这个标志,即清除任务,并创建一个新的

Intent intent = new Intent(getApplicationContext(), LoginActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent); 
+1

这对我有效。 – Mwas

+1

不客气! –

2

尝试添加在阵列中的所有活动,当你要删除刚刚从阵列中取出,并完成该活动。看到这里Remove activity from stack

3
if (getIntent().getBooleanExtra("EXIT", false)) { 
     finish(); 
android.os.Process.killProcess(android.os.Process.myPid()); 
    } 
3

我的回答试试这个

您需要在意图上添加这些标志..

Intent intent = new Intent(getApplicationContext(), LoginActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.putExtra("EXIT", true); 
startActivity(intent); 
finish(); 
0

我面对类似的情况。正如我想到的那样,即使我在开始时调用了finish()函数,整个onCreate()函数也会被执行。然后它会结束。在我的场景中,在onCreate()函数中,我调用另一个Activity。所以即使主要活动在onCreate()之后完成,第二项活动仍然存在。所以我的解决办法是,

private boolean finish = false;

中的onCreate

()的主要功能,

if(intent.getBooleanExtra("EXIT", false)) { 
     finish(); 
     finish = true; 
    } 

,我把支票在所有导航

if(!finish) { 
     Intent intent = new Intent(MainActivity.this, LoginActivity.class); 
     startActivity(intent); 
     finish(); 
    } 

我的退出功能是,

Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.putExtra("EXIT", true); 
    startActivity(intent); 
相关问题