从网址打开Android应用无法打开正确的活动

时间:2015-10-18 04:19:20

标签: android

我对来自网址的Android intent-filter有一个非常奇怪的问题。

简而言之:我将活动A视为MAIN& LAUNCHER和活动B具有意图过滤器,允许通过 href =" intent://..." 打开它。活动B将活动A列为父母。

如果我通过点击 href 打开应用,它会直接打开到B(正如预期的那样)。但是,如果我按下(因此我在活动A中)并尝试再次从 href 打开应用程序,它会打开活动A而不是B!这很奇怪,因为活动A除了MAIN和LAUNCHER之外没有任何意图过滤器。

我现在拥有的:

包含活动A和活动B的清单

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.my.app">

<activity
            android:name=".AActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

<activity
            android:name=".BActivity"
            android:label="@string/app_name"
            android:launchMode="singleTop"
            android:parentActivityName=".AActivity">

            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".AActivity" />

            <intent-filter>
                <data
                    android:host="m.something.com"
                    android:path="/somepath"
                    android:scheme="https" />
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>
        </activity>

我使用的href:

href="intent://m.something.com/somepath#Intent;scheme=https;package=com.my.app;S.extra_string=name@domain.com;end"

活动B代码:

起初,我没有覆盖onOptionsItemSelected。我想如果我在清单中指定了父活动,那么Android(默认情况下)将打开活动A,但是当我从URL打开活动B并按下时,它关闭了应用程序。因此,我需要执行以下代码。

@Override
public void onCreate(Bundle savedInstanceState) {
   setSupportActionBar(...);
   ActionBar actionBar = getSupportActionBar();
   actionBar.setDisplayHomeAsUpEnabled(true);
}

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                if (isTaskRoot()) {
                   Intent upIntent = NavUtils.getParentActivityIntent(this);
                   startActivity(upIntent);
                }

                finish();
                return true;
        }

        return super.onOptionsItemSelected(item);
    }

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
}

将活动B中的Z代码分段:

//Code omitted, basically I get the extra_string from the intent
//(from the a href) and processed it here.

现在,这些步骤有效:

  1. 从启动器打开应用程序(因此,显示活动A)。
  2. 点按设备的最新应用按钮,打开Chrome,导航到包含 a href 的网页,然后点击它。
  3. App打开活动B,片段Z可以获取extra_string
  4. 点按设备的最新应用按钮,转到Chrome,然后再次点击 a href
  5. App打开活动B,片段Z可以获取extra_string。
  6. 但是,这些是导致问题的步骤

    1. 从最近的应用中滑动应用(这很重要)。
    2. 打开Chrome,导航到包含 a href 的网页,然后点击它。
    3. 应用程序直接打开到活动B,片段Z可以成功获取extra_string。
    4. 按下,应用程序&#34;返回&#34;活动A成功。
    5. 按设备的近期应用按钮,打开Chrome(返回包含 a href 的网页),然后再次按 a href
    6. 期望:

      1. 应用程序直接打开活动B.
      2. 现实:

        1. 应用程序已开启至活动A.
        2. 我真的不知道这里发生了什么。我试图在SO中搜索类似的问题无济于事。有人遇到过同样的问题吗?

0 个答案:

没有答案