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

Sve*_*inT 9 android android-activity

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

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

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

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

Dav*_*ser 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()
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Intent intent = new Intent(this, MyActivity.class);
intent.putExtra("internal", "true");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

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

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