我正在尝试在我的 Android 应用程序中实现深度链接。我一直在关注this guide .我有一个从 Android list 中的 intent-filter 开始的 Android Activity :
<activity
android:name=".MyActivity"
android:parentActivityName=".MainActivity" >
<intent-filter android:label="@string/filter_title_deep_link">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="com.example" />
</intent-filter>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
</activity>
我从 adb 产生这个 Intent :
adb shell am start -W -a android.intent.action.VIEW -d "com.example://test" com.example
正在使用正确的 Intent 数据创建 Activity 并按预期运行。但是,在按下后退按钮时,应用程序退出。我期望使用 MainActivity
构建返回堆栈,如 Android list 中的 parentActivityName
所指定。显然情况并非如此。
在这种情况下,如何将父 Activity 添加到返回堆栈?
我想知道我是否可以使用 TaskStackBuilder
如图所示 here在通知的上下文中,但不确定它是如何工作的。
也许我应该有一个中间 Activity 来构建主要 Activity ,使用类似的东西:
TaskStackBuilder.create(this)
.addParentStack(MyActivity.class)
.addNextIntent(new Intent(this, MyActivity.class))
.startActivities();
?
最佳答案
我遇到了完全相同的问题。因此,如果您希望用户在按下 UP
按钮时转到您的父 Activity ,您可以在 AndroidManifest.xml
中定义父 Activity ,然后以编程方式控制向上导航。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
NavUtils.navigateUpFromSameTask(this);
}
您可以在所有 Activity 中执行相同的操作,以不断将用户导航回主屏幕。此外,您可以在将用户导航回来之前创建完整的返回堆栈。在以下文档中阅读更多信息。
直接的解决方案
您可以通过调用 isTaskRoot()
简单地检查深层链接的 Activity 是否有返回堆栈以返回您应用程序的任务本身。不过,我不太确定它是否有任何警告。
@Override
public void onBackPressed() {
if(isTaskRoot()) {
Intent parentIntent = new Intent(this, ParentActivity.class);
startActivity(parentIntent);
finish();
} else {
super.onBackPressed();
}
}
在这种情况下,您实际上不必在 Android list 中声明父 Activity 。
关于Android 深度链接 - 返回堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269588/