【问题标题】:Android custom URI scheme incorrectly encoded when type in browser在浏览器中键入时,Android 自定义 URI 方案编码不正确
【发布时间】:2012-01-17 19:49:17
【问题描述】:

我正在编写我的 android 应用程序,我想定义一个自定义 URI 方案,以便用户可以通过在浏览器中键入 URI 来访问我的应用程序,例如:myapps://cate=1&id=3

我在我的应用程序中成功实现了这一点,但我发现对于某些设备,浏览器对链接的处理方式不同。

在我的 HTC Flyer 中,它可以正确打开我的应用程序,但在三星 Galaxy Ace 中,浏览器会将链接转换为经过编码的 myapps%3A%2F%2Fcate=1%26id=3,然后在 Google 上搜索“ myapps://cate=1&id=3" 代替打开应用程序。

我在清单中这样定义意图过滤器:

<intent-filter >
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="myapps"/>
</intent-filter>

对这个问题有任何帮助吗?谢谢

已编辑

我刚刚看了android浏览器的源码,它定义了它接受什么方案:

protected static final Pattern ACCEPTED_URI_SCHEMA = Pattern.compile(
    "(?i)" + // switch on case insensitive matching
    "(" +    // begin group for schema
    "(?:http|https|file):\\/\\/" +
    "|(?:inline|data|about|content|javascript):" +
    ")" +
    "(.*)" );

现在我明白为什么自定义方案不起作用了! 任何应用都应该只捕获方案:http、https、file、inline、data、about、content、javascript。

【问题讨论】:

  • 忘了说,我的 HTC flyer 运行的是 android 3.2.1,ace 运行的是 android 2.3.4
  • 你能告诉我是如何解决这个问题的吗?准确地说是你在清单文件中做了哪些更改以及你是如何从 url 调用的?

标签: android uri manifest intentfilter


【解决方案1】:

为什么它必须是自定义 uri?

我会尝试使用标准 URL,然后为它定义一个广播接收器。

我认为这基本上就是http://youtube.comhttp://maps.google.com 的工作方式。只需尝试在 Galaxy Ace 的 Android 浏览器中输入这两个 URL。

【讨论】:

  • 感谢您的回答,您说得对,应该使用标准网址。请参阅我编辑的问题以了解我的发现。
猜你喜欢
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 2021-08-02
相关资源
最近更新 更多