Я пытаюсь выяснить, какие фильтры намерений мне нужны, чтобы:
просмотреть файл или контент с расширением *.npk
Я прочитал множество статей stackoverflow о фильтрах намерений, но до сих пор не могу понять, что мне не хватает.
Например, когда это мой фильтр намерений, я ожидаю, что он поймает файлы с расширением «*.npk». Я знаю о баге с паттернами, поэтому добавил несколько строк данных, чтобы отловить пути, где перед .npk стоит 0-4 точки:
<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:scheme="file" android:pathPattern=".*\\.npk" />
<data android:scheme="file" android:pathPattern=".*\\..*\\.npk" />
<data android:scheme="file" android:pathPattern=".*\\..*\\..*\\.npk" />
<data android:scheme="file" android:pathPattern=".*\\..*\\..*\\..*\\.npk" />
<data android:scheme="file" android:pathPattern=".*\\..*\\..*\\..*\\..*\\.npk" />
</intent-filter>
Когда я открываю файл из приложения Total Commander, он работает, и моя активность начинается, как и ожидалось (кстати, это работает, даже если у меня есть только один pathPattern=".*\\.npk", так что, возможно, упомянутая ошибка исправлена в леденце на палочке) :
{act=android.intent.action.VIEW dat=file:///storage/emulated/0/Android/data/com.fletech.smartbaby.android.pro/files/npk/animal-water-he.npk typ=application/octet-stream flg=0x10000000 cmp=com.fletech.smartbaby.android/.CategorySliderActivity}
Однако я не могу заставить его работать из приложения Dropbox. Это «захваченное» намерение от logcat. Чтобы захватить его, я добавил android:mimeType="*/*", чтобы я мог выбрать свое приложение, теперь каждый файл (также .jpg) хочет открыть мое приложение.
{act=android.intent.action.VIEW dat=file:///storage/emulated/0/Android/data/com.dropbox.android/files/u123456/scratch/apk/nature_0.npk typ=application/octet-stream flg=0x10000003 cmp=com.fletech.smartbaby.android/.CategorySliderActivity (has extras)}
Я не понимаю, почему вышеупомянутый фильтр не улавливает это намерение. Единственная разница, которую я вижу между намерением Total Commander и намерением Dropbox, — это флаг, дополнительные функции, которые не должны иметь значения, ИМХО, и наличие 2 или 4 точек в пути перед расширением файла, но мой фильтр намерений должен позаботиться об этом. этого.
Примечание. Я разрабатываю и тестирую Lollipop, но хочу, чтобы он работал на API 9+.