我有两个 Activity
MainActivity
DeepLinkActivity
我设置了所有内容以使用
NavUtils
进行导航,例如建议的here,here和here。我想要实现的是:
DeepLinkActivity
MainActivity
只要我的应用程序在最近的应用程序中有任何任务,一切都可以很好地工作。
但是,当我从最近的应用程序中滑出我的应用程序时,它的行为如下:
DeepLinkActivity
我调试了代码,发现
NavUtils.shouldUpRecreateTask()
返回false
。upIntent
将所有内容都设置为正常,就像我的Component
设置一样。但是,
NavUtils.navigateUpTo()
的行为就像对finish()
的调用一样。没有日志语句,什么都没有。
有什么想法,如何解决?
AndroidManifest.xml
<activity
android:name=".DeepLinkActivity"
android:parentActivityName="my.package.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="my.package.MainActivity"/>
<intent-filter>
<!-- Some intent filter -->
</intent-filter>
</activity>
DeepLinkActivity.java
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent upIntent = NavUtils.getParentActivityIntent(this);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
// create new task
TaskStackBuilder.create(this).addNextIntentWithParentStack(upIntent)
.startActivities();
} else {
// Stay in same task
NavUtils.navigateUpTo(this, upIntent);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
-----编辑-----
我意识到一些Google Apps以相同的方式损坏。如果您跳了例如要从搜索到联系人,请在AB中向上按,您会发现自己在主屏幕上,而不是联系人应用程序中。 (API19 / cm11)
最佳答案
我认为该方法存在问题。我已经阅读了支持库的源代码,并且该方法检查了intent的 Action 。它仅在以前创建您的应用程序时才起作用。如上所述,如果从应用程序预览中将其杀死,则shouldUp方法将停止工作。
我已经使用自己的“shouldUpRecreateTask”修复了该问题。当我收到一个直接创建 Activity (与您的行为类似)的通知时,便从我的BroadCastReceiver发送了一个意图内的自定义 Action 。然后,在我的方法中,做下一件事情:
private final boolean shouldUpRecreateTask(Activity from){
String action = from.getIntent().getAction();
return action != null && action.equals(com.xxxxxx.activities.Intent.FROM_NOTIFICATION);
}
....................................
if (shouldUpRecreateTask(this)) {
TaskStackBuilder.create(this)
.addNextIntentWithParentStack(upIntent)
.startActivities();
} else {
fillUpIntentWithExtras(upIntent);
NavUtils.navigateUpTo(this, upIntent);
}