如何禁用“返回”到某些活动?
我不希望用户能够回到我的应用程序的splashscreen。 一种解决scheme似乎是检查当前的活动是否是启animation面的一个实例,在这种情况下退出应用程序,如下面的代码所示。 但是,我不知道如何检查堆栈中以前的活动。 任何人都可以帮忙? 有没有其他方法来禁用“返回”给定的活动?
@Override public void onBackPressed() { if(<previous activity in stack is an instance of splashscreen>){ Intent exit_intent=new Intent(CurrentActivity.this, SplashScreen.class); exit_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); exit_intent.putExtra("EXIT", true); context.startActivity(exit_intent); } }
在开始下一个活动之后立即在Splash Screen活动中调用finish()
。
另一种方法是将此属性添加到AndroidManifest.xml
的活动: android:noHistory="true"
例:
<activity android:name=".SplashActivity" android:noHistory="true"/>
该属性指示Android从历史堆栈中移除SplashActivity,一旦从其导航离开。
在context.finish()
之后调用context.startActivity()
从Splashscreen调用下一个Activity
时请尝试以下操作:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
<activity android:name=".SplashActivity" android:noHistory="true"/>
从文档 :
当用户离开它并且不再显示在屏幕上时,是否应该从活动堆栈中移除活动并完成(调用其finish()方法) – 如果应该完成,则为“true”,而“false”如果不。 默认值是“false”。
值“真”意味着活动不会留下历史痕迹。 它不会留在任务的活动堆栈中,所以用户将不能返回到它。 在这种情况下,如果您为此活动的结果启动另一个活动,则不会调用onActivityResult()。
此属性是在API级别3中引入的。