【问题标题】:Android Intent-Filter for http address用于 http 地址的 Android Intent-Filter
【发布时间】:2011-05-30 18:50:15
【问题描述】:

我正在尝试通过我的应用拦截几个不同的链接,但我在使用意图过滤器数据参数时遇到了问题。

这是我要拦截的两种链接

  1. http://www.domain.com/#id=abcdef123346
  2. http://www.domain.com/social/landing/abcdef123456

我已经决定有一个单独的活动来拦截两个链接并使用 java 正则表达式来启动正确的活动。但是,如果不捕获 http://www.domain.com/abc123 之类的内容,我似乎无法仅捕获这两种格式

<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="www.domain.com"
                android:pathPattern="/#id.*" />
        </intent-filter>

这是我目前试图拦截的类型 1,但由于某种原因它不起作用。

此意图过滤器正确拦截类型 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" />
            <data android:host="domain.com" />
            <data android:host="www.domain.com" />
            <data android:pathPrefix="/share/web" />
            <data android:pathPrefix="/social/landing" />
        </intent-filter>

谢谢,

【问题讨论】:

  • 嘿@leo 我想实现同样的事情,我只想在用户从浏览器启动移动网站时打开我的应用程序我在这里做了同样的事情,但它没有任何帮助?

标签: android android-activity android-intent android-manifest intentfilter


【解决方案1】:

我认为pathPattern匹配的字符串是“/”,而“#id...”被省略了,因为它是片段的一部分。如果您改用http://www.domain.com/id/abcdef123456,pathPattern 可以匹配“/id/.*”,因为它是路径的一部分。

【讨论】:

  • 这绝对是一种可能性,但涉及更改服务器行为,希望不必这样做。还有其他可能吗?
  • 我没有看到 pathFragment 的任何选项。你能抓住所有去“/”的东西,然后把ID拿出来吗?
  • 不幸的是,如果我拦截所有带有斜杠的链接,我将阻止我的短网址解析,并且无法弄清楚实际目标是什么。
  • 我选择了这个解决方案,因为我想不出任何其他方法。谢谢。
  • 这是您所期望的行为。片段(# 之后的所有内容)无法识别您要检索的资源:它是由客户端/浏览器解释的额外数据。要检索的资源必须由 URL 的其余部分唯一标识。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 2011-03-12
  • 1970-01-01
  • 2013-11-22
  • 2014-08-16
  • 2013-10-06
  • 1970-01-01
相关资源
最近更新 更多