2015-01-16 2 views
0

Я пытаюсь выяснить намерения фильтры мне нужны для того, чтобы:намерения фильтр, чтобы поймать намерения для просмотра * .EXT файлов

просмотра файла или содержимого с * .npk расширением

Я прочитал загружает статьи stackoverflow о фильтрах намерений, но все еще не может понять, что мне не хватает.

Например, если это мой фильтр намерений, я ожидаю, что он поймает файлы с расширением «* .npk». Я знаю об ошибке с узорами, поэтому я добавил несколько строк данных для того, чтобы поймать пути, где Eсть 0-4 точек перед .npk:

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

Когда я открываю файл из общего командира приложение работает, и он начинает свою деятельность, как и ожидалось (BTW это работает, даже если у меня есть только один pathPattern =, так что, может быть, упомянутая ошибка будет исправлена ​​в леденец «* \\ НПК..»):

{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} 

Однако я могу» t заставить его работать из приложения 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)} 

Я не понимаю, почему указанный фильтр не поймает это намерение. Единственное различие, которое я вижу между общим намерением командира и умыванием Dropbox, - это флаг, дополнительные функции, которые не должны иметь значения IMHO, и что на пути до расширения файла есть 2 vs 4 точки, но мой фильтр намерений должен заботиться из этого.

Примечание: Я разрабатываю и тестирую на леденец, но я бы хотел, чтобы он работал на api 9+.

ответ

0

После очередного длительного периода проб и ошибок я нашел следующее решение. Мне пришлось добавить и элементы android: host = "*" и android: mimeType = "*/*". Кажется, что есть некоторые несоответствия в официальной документации по Android.

 <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:host="*" android:mimeType="*/*" android:pathPattern=".*\\.npk" /> 
      <data android:scheme="file" android:host="*" android:mimeType="*/*" android:pathPattern=".*\\..*\\.npk" /> 
      <data android:scheme="file" android:host="*" android:mimeType="*/*" android:pathPattern=".*\\..*\\..*\\.npk" /> 
      <data android:scheme="file" android:host="*" android:mimeType="*/*" android:pathPattern=".*\\..*\\..*\\..*\\.npk" /> 
      <data android:scheme="file" android:host="*" android:mimeType="*/*" android:pathPattern=".*\\..*\\..*\\..*\\..*\\.npk" /> 
     </intent-filter> 
Смежные вопросы