如果活动堆栈为空,则启动主活动

时间:2012-07-20 10:53:56

标签: android android-activity

我有一个活动,可以从其他几个活动中启动,以及网址过滤器意图。

在此活动中,我使用操作栏中的主页图标作为后退按钮,将用户带回上一个活动(而不是“主页”操作)。现在我通过调用finish()函数来做到这一点。在应用程序内部工作时,此方法可以正常工作。

但是,如果通过url过滤器意图启动活动,我希望主页图标将用户带到主活动。显然,调用finish()只会关闭活动。

所以我的问题是,有没有办法检查我的应用程序堆栈是否为空,然后启动主要活动,如果是真的?或者我是以错误的方式攻击这个?

1 个答案:

答案 0 :(得分:14)

如果你的应用是通过url intent过滤器启动的,并且它创建了自己的任务,那么你可以使用

if (isTaskRoot()) {
    // This activity is at root of task, so launch main activity
} else {
    // This activity isn't at root of task, so just finish()
}

编辑:添加了另一种可能的方法

如果您的应用在通过网址意图过滤器启动时启动到现有任务,那么您可以执行以下操作:

当您从应用程序中的其他活动启动活动时,请将EXTRA添加到Intent,如下所示:

Intent intent = new Intent(this, MyActivity.class);
intent.putExtra("internal", "true");
startActivity(intent);

当您的活动启动时,它可以检查Intent中是否存在EXTRA,以确定它是在内部启动还是通过URL intent-filter启动,如下所示:

Intent intent = getIntent();
if (intent.hasExtra("internal")) {
    // Launched internally
} else {
    // Launched via intent-filter
}