我有一个活动可以从其他几个活动启动,带有url过滤器意图。
在这个活动中,我使用操作栏中的主页图标作为返回按钮,将用户带回上一个活动(而不是“主页”操作)。目前,我通过调用finish()函数来实现这一点。当在应用程序内部工作时,这很好用。
然而,如果通过url过滤器意图启动该活动,则希望主页图标将用户带到主活动。显然,调用finish()将关闭该活动。
所以我的问题是,有没有办法检查我的应用程序堆栈是否为空,然后在真正的情况下启动主要活动?或者我是在错误的方式下进行攻击吗?
我有一个活动可以从其他几个活动启动,带有url过滤器意图。
在这个活动中,我使用操作栏中的主页图标作为返回按钮,将用户带回上一个活动(而不是“主页”操作)。目前,我通过调用finish()函数来实现这一点。当在应用程序内部工作时,这很好用。
然而,如果通过url过滤器意图启动该活动,则希望主页图标将用户带到主活动。显然,调用finish()将关闭该活动。
所以我的问题是,有没有办法检查我的应用程序堆栈是否为空,然后在真正的情况下启动主要活动?或者我是在错误的方式下进行攻击吗?
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()
}
编辑:添加了另一种可能的方法
如果您的应用程序通过URL意图过滤器启动时被启动到现有任务中,则可以执行以下操作:
当您从应用程序中的其他活动启动您的活动时,向意图添加EXTRA,如下所示:
Intent intent = new Intent(this, MyActivity.class);
intent.putExtra("internal", "true");
startActivity(intent);
当您的活动被启动时,它可以检查Intent中是否存在EXTRA,以确定它是通过内部启动还是通过URL意图过滤器启动的,如下所示:
Intent intent = getIntent();
if (intent.hasExtra("internal")) {
// Launched internally
} else {
// Launched via intent-filter
}
launchMode="singleTask"
,在这种情况下,您的活动将在新任务中启动,您可以使用我建议的第一种方法。或者,您可以声明一个不同的Activity,通过URL意图过滤器启动,以便您知道您来自哪里。 - David Wasser