2016-04-16 2 views
1

У меня есть фильтр намерений, который я хочу сопоставить с файлами, которые имеют MYAPP в имени файла и имеют расширение .json.Android pathPattern для файлов, начинающихся с

Теперь есть много примеров того, как определить фильтр намерений для определенного расширения, но как я также ограничить шаблон пути файлами, которые содержат определенную строку (в данном случае MYAPP) в имени файла?

+1

Пожалуйста, имейте в виду, что использование имен файлов или расширений файлов является все более рискованным предложением. [Приложения не будут использовать в будущем значения 'file:' 'Uri' '(https://commonsware.com/blog/2016/03/14/psa-file-scheme-ban-n-developer-preview.html), и вы не можете полагаться на другие схемы (например, 'content:'), обязательно используя распознаваемое имя файла или расширение. – CommonsWare

+0

Я не понимаю, что это значит. Мое приложение экспортирует и импортирует свои данные через json-файлы, и я хочу, чтобы пользователи могли импортировать эти файлы, нажав на них в файловом менеджере или Google Диске или что-то еще. Затем приложение анализирует json и определяет, находится ли он в правильном формате или нет. Что является недостатком этого подхода и какова будет альтернатива? – TimSim

+1

«Я не понимаю, что это значит» - это означает, что «<фильтр-замысел>» на основе имени файла или расширения файла работает плохо сегодня и завтра будет хуже. «Какая альтернатива?» - иметь '<намерение-фильтр>', который обращает внимание на тип MIME. – CommonsWare

ответ

0

Вы можете сделать таким образом, как это было предложено this answer:

<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" />   
    <data android:scheme="file" /> 
    <data android:mimeType="application/json" /> 
    <data android:host="*" /> 
    <data android:pathPattern="/.*/.*/.*/.*/.*/MYAPP.*\\.json" /> 
    <data android:pathPattern="/.*/.*/.*/.*/MYAPP.*\\.json" /> 
    <data android:pathPattern="/.*/.*/.*/MYAPP.*\\.json" /> 
    <data android:pathPattern="/.*/.*/MYAPP.*\\.json" /> 
    <data android:pathPattern="/.*/MYAPP.*\\.json" /> 
    <data android:pathPattern=".*MYAPP.*\\.json" /> 
</intent-filter> 

Вы можете повторить /.* последовательность для каждой поддиректории вы хотите, чтобы соответствовать, как в примере.