Android深层链接 - 后台堆栈

时间:2014-06-17 17:06:31

标签: android android-intent android-activity deep-linking back-stack

我正在尝试在Android应用程序中实现深层链接。我一直关注this guide。我有一个从Android清单中启动和意图过滤的Android活动:

<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产生了这个意图:

adb shell am start -W -a android.intent.action.VIEW -d "com.example://test" com.example

正在使用正确的意图数据创建活动,并按预期运行。但是,按下后退按钮后,应用程序退出。我希望后备堆栈使用MainActivity构建,由Android清单中的parentActivityName指定。显然事实并非如此。

在这种情况下,如何将父活动添加到后台?

我想知道我是否可以在通知环境中使用TaskStackBuilder显示here,但不确定它是如何工作的。

也许我应该有一个中间活动来使用类似的东西构建主要活动:

TaskStackBuilder.create(this)
                .addParentStack(MyActivity.class)
                .addNextIntent(new Intent(this, MyActivity.class))
                .startActivities();

3 个答案:

答案 0 :(得分:8)

我遇到了同样的问题。因此,如果您希望用户转到您的父活动,只要他们按下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);
}

您可以在所有活动中执行相同操作,以便不断地将用户导航回主屏幕。此外,您可以在导航用户之前创建完整的后台堆栈。请阅读以下文档中的更多内容。

Providing Up Navigation

直接解决方案

您可以通过调用isTaskRoot()来检查深层关联活动是否有后备堆栈,以便返回到您应用的任务中。我不确定它是否确实有任何警告。

@Override
public void onBackPressed() {
    if(isTaskRoot()) {
        Intent parentIntent = new Intent(this, ParentActivity.class);
        startActivity(parentIntent);
        finish();
    } else {
        super.onBackPressed();
    }
}

在这种情况下,您不必在Android Manifest中声明父活动。

答案 1 :(得分:5)

你试过这个吗,

syms x
f(x) = x^2;    % Equivalent to: f = symfun(x^2,x);
df = diff(f,x) % Since f is a symfun, df will be
df(3)

如果是深层链接,您必须构建自己的App堆栈。

答案 2 :(得分:1)

我一直在使用Deep Linking的基础知识,为Android的应用程序链接和应用程序索引功能工作, 我希望这对索引应用页面很有用,并允许Google按照此处的指定抓取应用Deep link Guide

  • 我在深度链接和应用程序索引中研究的主要规则是为从搜索或某处启动的用户提供首次点击免费体验。并且不应包含任何登录/注册页面。 但是在onBack按钮按下事件时,必须返回搜索结果或原始位置而不是您的父活动。 来源App indexing Best practices and Important

此最佳做法适用于App indexing API,因为您已从Android开发人员网站引用了App indexing Training网站的deeplink链接。