如何禁用“返回”某些活动?

Posted

技术标签:

【中文标题】如何禁用“返回”某些活动?【英文标题】:How can I disable 'go back' to some activity? 【发布时间】:2011-09-16 15:06:59 【问题描述】:

我不希望用户能够返回到我的应用的启动画面。一种解决方案似乎是检查当前活动下方的活动是否是启动画面的实例,在这种情况下退出应用程序,如下面的代码所示。但是,我不知道如何检查堆栈中的先前活动是什么。有人可以帮忙吗?有没有其他方法可以禁用“返回”给定活动?

@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);
    

【问题讨论】:

【参考方案1】:

在启动下一个活动后立即在初始屏幕活动中调用finish()

另一种方法是将此属性添加到androidManifest.xml 中的活动中:android:noHistory="true"

例子:

<activity android:name=".SplashActivity" android:noHistory="true"/>

此属性指示 Android 在其导航离开后从历史堆栈中删除 SplashActivity。

【讨论】:

非常感谢 "android:noHistory="true""- 这很有帮助! finish() (在开始下一个活动后立即添加到原始活动中)有效,因为 Android 不会“返回”到已完成(销毁)的活动,仅返回已暂停或停止的活动(活着)。 使用android:noHistory="true"会造成麻烦,因为它不会清除所有任务,@A。 Binzxxxxxx 的回答更好【参考方案2】:

只需在context.startActivity() 之后调用context.finish()

【讨论】:

不错的选择,称为forwarding 在开始下一个活动时播放媒体文件时可能不起作用。因为它可能会被缩短。【参考方案3】:

从您的启动画面调用下一个Activity 时尝试以下操作:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

【讨论】:

【参考方案4】:
<activity android:name=".SplashActivity" android:noHistory="true"/>

来自documentation:

是否应该从活动堆栈中删除活动 并在用户离开时完成(调用它的 finish() 方法) 从它,它在屏幕上不再可见 - 如果它应该是“真” 完成,如果没有,则为“假”。默认值为“假”。

值为“true”表示活动不会留下历史记录 痕迹。它不会保留在任务的活动堆栈中,因此 用户将无法返回。在这种情况下, 如果您开始另一个活动,则永远不会调用 onActivityResult() 此活动的结果。

此属性是在 API 级别 3 中引入的。

【讨论】:

以上是关于如何禁用“返回”某些活动?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android IPC 中返回活动对象列表

如何检测用户何时专门通过“最近使用的应用”返回应用?

返回堆栈和意图标志不起作用

EnumPorts() 在某些机器上返回奇怪的错误

Android中的CreateFromStream为某些url返回null

根据另一个字段的值启用/禁用对某些字段的输入