我有一个可以从其他几个活动启动的活动,以及 url 过滤器意图。
在此活动中,我将操作栏中的主页图标用作后退按钮,将用户带回到上一个活动(而不是作为“主页”操作)。现在我通过调用 finish() 函数来做到这一点。在应用程序中工作时,这可以正常工作。
但是,如果通过 url 过滤器意图启动活动,我希望主页图标将用户带到主要活动。显然,调用 finish() 只会关闭活动。
所以我的问题是,有没有办法检查我的应用程序堆栈是否为空,如果为真则启动主要活动?还是我以错误的方式攻击这个?
我有一个可以从其他几个活动启动的活动,以及 url 过滤器意图。
在此活动中,我将操作栏中的主页图标用作后退按钮,将用户带回到上一个活动(而不是作为“主页”操作)。现在我通过调用 finish() 函数来做到这一点。在应用程序中工作时,这可以正常工作。
但是,如果通过 url 过滤器意图启动活动,我希望主页图标将用户带到主要活动。显然,调用 finish() 只会关闭活动。
所以我的问题是,有没有办法检查我的应用程序堆栈是否为空,如果为真则启动主要活动?还是我以错误的方式攻击这个?
如果您的应用程序是通过 url 意图过滤器启动并创建自己的任务,那么您可以使用
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 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
}