9

我有一个要在我的 Android 应用程序中覆盖的 url。单击电子邮件中指向该链接的链接会弹出Intent Chooser对话框(“使用完成”)。但是,从 Chrome(在 Android 4 上)中单击相同的链接(在<a>标签中)会将我重定向到该 url,并且不提供Intent Chooser.

如果我将<a>标签中的链接替换为指向 Google Play 商店 ( https://play.google.com) 的链接,则单击该链接会再次弹出Intent Chooser

Google Play 商店和 Chrome 有什么特别之处,还是我在配置我的 url 时做错了什么?我可以在 html 中做些什么来完成这项工作吗?

这是<intent-filter>

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

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

        <data android:scheme="https"
              android:host="www.example.com"
            />
        <data android:scheme="http"
              android:host="www.example.com"
            />
    </intent-filter>
</activity>

(重定向到 url 也不会弹出Intent Chooser对话框,但我认为我上面的情况更明确地表达了我的问题。)

另外值得注意的是,我相当肯定这一切都在我的域关闭时工作。一旦我的域上线,它就停止了工作。这可能是我的想象,因为当时我并没有 100% 专注于这个问题。

Chrome 是否有可能将 Google Play 商店 url 视为特殊的,否则它会在打开之前等待来自 url 的非 200 响应Intent Chooser

4

3 回答 3

2

我对此进行了相当多的修改,向您展示一种有效的方法可能会更容易。这适用于具有 2.3.4 的设备和具有 4.2.2 的设备,所以我认为它适用于大多数设备。

这是清单文件中的意图过滤器:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="http" android:host="realsimpleapps.com" android:pathPrefix="/acv/" />
</intent-filter>

这是我的html文件:

<a href="http://realsimpleapps.com/acv/aThing">Click Me!</a>

在我的主要活动中,我使用它来获取我将“aThing”(上图)设置为的任何内容:

Uri data = getIntent().getData();
if (data != null) {
    List<String> params = data.getPathSegments();
    if (params != null) {
        Log.d(tag, "Param 0: " + params.get(0));
    }
}

让它工作,然后将第二个数据元素添加到意图过滤器。如果在那之后它仍然有效,你应该被设置。

让我们知道怎么回事。

D b

于 2013-03-26T20:36:28.480 回答
1

很可能是一个真实/已知的错误。

我建议的那个(但现在已关闭,因此它似乎会针对您正在尝试的版本进行修复): https ://code.google.com/p/chromium/issues/detail?id=113140

由@xbakesk 发现/打开: https ://code.google.com/p/chromium/issues/detail?id=170925 https://code.google.com/p/chromium/issues/detail?id=230104

如果发现任何其他错误,请在评论中告诉我,我将直接添加或编辑我的答案。如果错误被关闭,我也会尝试更新答案。

于 2013-04-11T19:03:58.097 回答
0

我不确定您是否可以向意图过滤器添加多个数据元素。我会为不同的方案使用两个不同的意图过滤器。

如果您可以控制网页上的 url,您可以将 http 更改为您自己的自定义协议,以便您的应用程序将打开而不是沿着网络浏览器提示。

于 2013-03-26T15:54:42.647 回答