Android网址覆盖不适用于重定向

时间:2013-03-19 14:18:10

标签: android android-intent intentfilter url-scheme

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

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

Google Play商店和Chrome是否有特别之处,或者我在配置网址时遇到了什么错误?我有什么办法可以用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>

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

另外值得注意的是,我很确定这一切都在我的域名崩溃时工作。一旦我的域名上线,这就停止了。这可能是我的想象力,因为我当时并不是100%专注于这个问题。

Chrome可能会特别对待Google Play商店网址,否则会在打开Intent Chooser之前等待网址的非200响应?

3 个答案:

答案 0 :(得分: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));
    }
}

使其工作,然后将第二个数据元素添加到intent过滤器。如果它之后仍然有效,你应该设置。

让我们知道它是怎么回事。

分贝

答案 1 :(得分: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

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

答案 2 :(得分:0)

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

如果您可以控制网页上的网址,则可以将http更改为您自己的自定义协议,这样您的应用就会打开而不是通过网络浏览器提示。