2012-03-05 3 views
2

Я использую фильтр намерений ниже, чтобы связать деятельность с тремя типами пользовательских расширений для схемы «файл»: .smmx, .smmstyle и .mmНамерение фильтра со схемой файла и pathPattern неправильно оценивает истинные

<activity blablabla> 
     <intent-filter> 
      <action android:name="android.intent.action.EDIT" /> 
      <action android:name="android.intent.action.VIEW" /> 

      <category android:name="android.intent.category.DEFAULT" /> 

      <data 
       android:host="*" 
       android:mimeType="application/octet-stream" 
       android:pathPattern=".*\\.smmx" 
       android:scheme="file" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.EDIT" /> 
      <action android:name="android.intent.action.VIEW" /> 

      <category android:name="android.intent.category.DEFAULT" /> 

      <data 
       android:host="*" 
       android:mimeType="application/octet-stream" 
       android:pathPattern=".*\\.mm" 
       android:scheme="file" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.EDIT" /> 
      <action android:name="android.intent.action.VIEW" /> 

      <category android:name="android.intent.category.DEFAULT" /> 

      <data 
       android:host="*" 
       android:mimeType="application/octet-stream" 
       android:pathPattern=".*\\.smmstyle" 
       android:scheme="file" /> 
     </intent-filter> 
</activity> 

Проблема заключается в том, что при использовании с приложением Dropbox этот фильтр намерений ассоциирует действие практически с любым расширением. Например: при открытии файлов с расширениями * .mpb, * .adu - и многое другое - приложение dropbox запускает связанное с ним действие, хотя в имени файла нет совпадения для любого из указанных выше путей PathPattern в фильтре намерений. Кажется, что фильтр намерения ошибочно оценивает значение true.

Любая идея, что может быть причиной этого и как избежать ассоциирования с файлами, не предназначенными для моей деятельности?

После добавления андроида: host = "*" в каждую секцию данных, поведение действительно меняется. Действие больше не связано со всеми расширениями. Однако теперь он не всегда оценивается как совпадение. Например, это Uri не соответствует файл: ///mnt/sdcard/Android/data/com.dropbox.android/files/scratch/Bright%20Orange%20Levels.smmstyle

Хотя другой файл с таким же расширением открытое из того же приложения, что и приложение, было согласовано ОК. Это происходит как на галактике GT-I9000, работающей под управлением Android 2.2, так и на Archos 80 G9. Андроид 3.2 Итак: намного лучше, но еще не идеально. Будут дальнейшие исследования.

+0

Попробуйте добавить атрибут 'android: host'. – CommonsWare

+0

Да, улучшает поведение много, но все еще не идеально. См. Мой измененный вопрос выше (я не знаю, так ли я должен реагировать?) –

+0

Вы пробовали разные ** андроиды: параметры mimeType **? –

ответ

0

Когда Android выполняет соответствующий тест между намерением и фильмом намерения, тест только для сравнения URI и типа данных в объекте Intent с URI и типом данных, указанным в фильтре. Вы можете увидеть подробное объяснение here.

+0

Да, я знаю документацию, но это не помогает. –

Смежные вопросы