use*_*701 19 android intentfilter android-intent
我喜欢我的一项活动来获取特定的网址.模式是:
http://www.example.com/abc123/foo/xyz789
Run Code Online (Sandbox Code Playgroud)
路径分量"abc123"和"xyz789"可以是任何α数字序列,长度> 1.
在我的清单中这样做:
<activity>
<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="example.com"
android:pathPattern="/.*/foo/.*" />
Run Code Online (Sandbox Code Playgroud)
但似乎我的域中的任何模式都匹配,即:
myexample.com
myexample.com/whatever
Run Code Online (Sandbox Code Playgroud)
两者都匹配.我想也许.*运算符不能像我期望的那样工作?任何帮助都会很棒,
谢谢
http://developer.android.com/guide/topics/manifest/data-element.html
Cro*_*ull 31
我今天遇到了同样的问题,我的解决方案是:
<data android:pathPattern="/remotes/..*/..*"/>
Run Code Online (Sandbox Code Playgroud)
使用(..*)代替(.+)
在原始问题的情况下,我猜这可以工作:
<data
android:host="example.com"
android:pathPattern="..*/foo/..*"
android:scheme="http"/>
Run Code Online (Sandbox Code Playgroud)
raj*_*raj 14
由于Android操作系统使用PatternMatcher并从源代码和文档中观察它只能使用. *和\\(转义字符)我们可能需要有点创意 - 即,用于\\停止正则表达式评估,然后从那时起恢复.
<data
android:host="example.com"
android:pathPattern=".*\\/foo/.*"
android:scheme="http"/>
Run Code Online (Sandbox Code Playgroud)
这只会匹配myexample.com/whatever而不是myexample.com
在uri /的末尾创建不同的uri使用意图过滤器
示例解决方案,使用http://www.example.com/abc123/foo/xyz789/而不是http://www.example.com/abc123/foo/xyz789然后使用
example.com/abc123/ android:pathPattern=".*\\/
example.com/abc123/foo/xyz789/ android:pathPattern=".*\\/foo/.*\\/
example.com/abc123/foo/xyz789/bar/uvx456/ android:pathPattern=".*\\/foo/.*\\/bar/.*\\/
问题是 .* 匹配所有内容,但什么也不匹配,因此“/.*/”匹配“//”,这相当于路径中的“/”。
此外,您还可以确保示例中的两个路径段“abc123”与此处支持的表达式匹配器相同。
换句话说,您想要将路径更改为可以匹配的更简单的路径。如果是您的组件接收意图,您可以传递一个假 URL,它只是真实 URL 的可变部分。例如,如果你想匹配,
http://www.example.com/.+/foo/.+
Run Code Online (Sandbox Code Playgroud)
如果两个捕获组相等,只需在意图中传递http://mystuff/abc123,并将数据模式设置为http://mystuff/*
然后在收到意图时对其进行解析,并通过填充已知的常量部分将其转换为真实的 URL。
| 归档时间: |
|
| 查看次数: |
19834 次 |
| 最近记录: |