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