【发布时间】: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