Работает ли (если да, как) 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 шт):

Автор решения: woesss

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" />

Плюс все варианты регистра = "скажем дружно ..." и вместо полезных инструментов пойдём писать очередную ктопко-тыкалку с рекламой, чтобы Гугл получал прибыль с её показов - а от ковыряния юзеров в локальных файлах какой выхлоп!?...

→ Ссылка