Работает ли (если да, как) pathPattern с scheme content
Если делаю intent-filter по pathPattern со схемами file или http, всё работает. Но вот такое:
<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:host="*"
android:pathPattern=".*\\.tar"
android:scheme="content"></data>
</intent-filter>
не обрабатывается. Вариант с mime-type не вариант (во-первых, хочу использовать своё расширение файла, а во-вторых, (телефон виноват?) tar-архивы обычно отдаются как text/plain, что совсем неудобно). Собственно, вопрос, как сделать, чтобы файлы (ладно, uri) из разных приложений (т.е. именно content:/) могли открывать в соответствии с их расширением?
Ответы (1 шт):
Uri не обязан содержать имя файла: приложение, которое его расшаривает, имеет полное право вписать в uri что в голову взбредёт разработчику.
Застарелый геморрой - этот убогий pathPattern.
Во-первых, он чувствителен к регистру, то есть для tar, TAR, TaR, taR, etc. нужен отдельный паттерн.
Во-вторых: он отваливается на первом вхождении первого символа, если следом за ним нет второго. Если весь путь содержит более одной точки нужно добавлять паттерн на каждое возможное их количество, типа такого:
<data android:scheme="http" android:host="*"
android:pathPattern=".*\\.tar" />
<data android:scheme="http" android:host="*"
android:pathPattern=".*\\..*\\.tar" />
<data android:scheme="http" android:host="*"
android:pathPattern=".*\\..*\\..*\\..tar" />
<data android:scheme="http" android:host="*"
android:pathPattern=".*\\..*\\..*\\..*\\.tar" />
Плюс все варианты регистра = "скажем дружно ..." и вместо полезных инструментов пойдём писать очередную ктопко-тыкалку с рекламой, чтобы Гугл получал прибыль с её показов - а от ковыряния юзеров в локальных файлах какой выхлоп!?...