【问题标题】:Intent filter pathPrefix with '#' not working带有“#”的意图过滤器路径前缀不起作用
【发布时间】:2013-05-03 07:15:34
【问题描述】:

我正在尝试设置一个意图过滤器以在用户单击以下 URI 时启动我的活动: example.com/pathA/pathB/#pathC/someGUID

所以我在清单文件中添加了以下 XML:

<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:host="example.com"
        android:pathPrefix="/pathA/pathB/#pathC"
        android:scheme="http" />
</intent-filter>

我在想 '#' 字符搞砸了一切,但我尝试转义这个字符但没有运气。有什么想法吗?

更新:当我说“尝试转义”时,我的意思是使用百分比编码(# 等于 %23)

【问题讨论】:

    标签: android android-activity intentfilter


    【解决方案1】:

    意图过滤器使用UriMatcher 来解析URI 并确定是否存在匹配项。 # 是数字的 URI 通配符,如 UriMatcher 中的示例所示。根据UriMatcher source code,没有转义序列来转义URI 中的#。因此,您应该使用另一个非保留符号(请注意,* 也保留为任何文本的通配符)。

    【讨论】:

    • @user1774914 - 对 - 似乎没有一种方法可以处理其中包含 # 的 URI。您当然可以处理 /pathA/pathB/ 并手动检查 URI 的其余部分是否为 #pathC,但系统会显示您也处理类似 /pathA/pathB/pathD 的 URI
    • 奇怪的是,android 文档说...因为从 XML 读取字符串时(在将其解析为模式之前)将 '\' 用作转义字符,因此您需要双重转义:例如,文字“*”将写为“\*”,而文字“\”将写为“\\\\”。这与在 Java 代码中构造字符串时需要编写的内容基本相同。
    • 这会让你相信你可以像 \\# 一样逃避它,但这仍然行不通。我想这只是不行。
    • 2 年后 你找到解决这个问题的方法了吗?我们真的应该通过检查应用程序代码中的 URL 来解决这个问题,如果它与所需的模式不匹配,我们只需打开浏览器?
    • intent filter解析没有变化
    猜你喜欢
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多