我正在尝试在我的Android应用程序中实现深层链接.我一直在关注这个指南.我在Android清单中启动了Android活动并进行了intent-filter:
我从adb产生这个意图:
adb shell am start -W -a android.intent.action.VIEW -d "com.example://test" com.example
正在使用正确的意图数据创建活动,并按预期运行.但是,按下后退按钮后,应用程序退出.MainActivity
正如parentActivityName
Android清单中所指出的那样,我期待构建后备栈.显然事实并非如此.
在这种情况下,如何将父活动添加到后台堆栈?
我想,如果我可以使用一个TaskStackBuilder
如图所示这里在通知的情况下,但不知道它是如何工作的.
也许我应该有一个中间Activity来构建主要活动,例如:
TaskStackBuilder.create(this) .addParentStack(MyActivity.class) .addNextIntent(new Intent(this, MyActivity.class)) .startActivities();
?
我遇到了完全相同的问题.因此,如果您希望用户转到父活动,只要他们按下UP
按钮,您就可以在其中定义父活动AndroidManifest.xml
,然后以编程方式控制向上导航.
@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); }
您可以在所有活动中执行相同操作,以不断地将用户导航回主屏幕.此外,您可以在导航用户之前创建完整的后台堆栈.请阅读以下文档中的更多内容.
提供导航
您只需检查深层链接活动是否有后台堆栈,即可通过调用返回应用程序的任务本身isTaskRoot()
.我不太确定它是否确实有任何警告.
@Override public void onBackPressed() { if(isTaskRoot()) { Intent parentIntent = new Intent(this, ParentActivity.class); startActivity(parentIntent); finish(); } else { super.onBackPressed(); } }
在这种情况下,您实际上不必在Android Manifest中声明父活动.
你试过这样做吗
Intent intent = new Intent(this, MyActivity.class); TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); stackBuilder.addNextIntentWithParentStack(intent); stackBuilder.startActivities();
在深层链接的情况下,您必须构建自己的App堆栈.