Android - соответствует шаблону url?
Я хотел бы, чтобы один из моих действий взял конкретный URL-адрес. Шаблон:
http://www.example.com/abc123/foo/xyz789
Компонентами пути "abc123" и "xyz789" может быть любая последовательность альфа-чисел, длинa > 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/.*" />
но кажется, что любой шаблон из моего домена совпадает, т.е.
myexample.com
myexample.com/whatever
оба совпадают. Возможно, оператор. * Не работает, как я ожидаю здесь? Любая помощь будет большой,
Спасибо
http://developer.android.com/guide/topics/manifest/data-element.html
Ответы
Ответ 1
У меня была такая же проблема сегодня, мое решение было:
<data android:pathPattern="/remotes/..*/..*"/>
используя (.. *) в качестве замены для (. +)
В исходном вопросе я предполагаю, что это может работать:
<data
android:host="example.com"
android:pathPattern="..*/foo/..*"
android:scheme="http"/>
Ответ 2
Так как ОС Android использует PatternMatcher и наблюдает из исходного кода и документацию, она может работать только с .
*
и \\
(escape-символы), возможно, потребуется немного творческого - т.е. используйте \\
, чтобы остановить вычисление регулярных выражений, а затем возобновить с этого времени.
<data
android:host="example.com"
android:pathPattern=".*\\/foo/.*"
android:scheme="http"/>
который будет соответствовать только 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/.*\\/
Ответ 3
проблема в том, что. * соответствует всем, - и ничего -, поэтому "/.*/" соответствует "//", что эквивалентно просто "/" в пути.
Кроме того, вы можете убедиться, что два сегмента пути "abc123" в вашем примере равны с поддерживаемым здесь соглашением выражений.
Другими словами, вы хотите изменить свои пути на нечто более простое, которое можно сопоставить. если это ваш компонент, который получает намерение, вы можете передать поддельный URL-адрес, который является просто переменной частью реального URL-адреса. например, если вы хотите совместить,
http://www.example.com/.+/foo/.+
где две захваченные группы равны, просто передайте http://mystuff/abc123 в намерении и задайте шаблон данных http://mystuff/ *
затем проанализируйте это, когда вы получите намерение и преобразуете его в настоящий URL-адрес, заполнив известные константные части.
Ответ 4
<data
android:host="example.com"
android:pathPattern=".*\\/convo/.*"
android:scheme="http"/>
Этот шаблон не работает для меня, чтобы реализовать http://example.com/0/h/mainpage/convo/837287
Есть ли решение для этого?
мне не нужно решение, как показано ниже:
<data
android:host="example.com"
android:pathPattern=".*\\/.*\\/.*\\/convo/.*"
android:scheme="http"/>