我的应用程序仅允许登录用户访问活动。如果用户注销,则共享首选项布尔值isLogged将设置为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();
}
当我按下注销选项时,会打开上一个活动。
有什么建议请帮帮我吗?
答案 0 :(得分:6)
你应该使用这个标志,清除你的任务并创建一个新的
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
答案 1 :(得分:4)
试试这个
您需要在Intent中添加这些标志..
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();
答案 2 :(得分:3)
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
android.os.Process.killProcess(android.os.Process.myPid());
}
答案 3 :(得分:2)
尝试在数组中添加所有活动,当您要删除时,只需将其从数组中删除并完成该活动。在这里查看我的答案Remove activity from stack
答案 4 :(得分: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);