2012-02-09 8 views
7

Męski,Wiele rozszerzenie pliku/Mimetype intent-filtry z jednej działalności

Próbuję dostać go tak, że moja aplikacja Android może reagować zarówno na pliki są otwarte (poprzez dopasowanie ich rozszerzeń) i typów MIME (więc będą działać z poziomu przeglądarki).

ja po poradę tutaj:

Android intent filter for a particular file extension?

ale nadal nie miał szczęścia.

Odpowiednia sekcja z moim android pliku manifestu jest następujący:

<activity android:name="MuPDFActivity" 
       android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="application/vnd.ms-xpsdocument"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="application/pdf"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="application/x-cbz"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data android:scheme="file"/> 
      <data android:mimeType="*/*"/> 
      <data android:pathPattern=".*\\.xps"/> 
      <data android:host="*"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data android:scheme="file"/> 
      <data android:mimeType="*/*"/> 
      <data android:pathPattern=".*\\.pdf"/> 
      <data android:host="*"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data android:scheme="file"/> 
      <data android:mimeType="*/*"/> 
      <data android:pathPattern=".*\\.cbz"/> 
      <data android:host="*"/> 
     </intent-filter> 
    </activity> 

Jak widać, chciałbym aplikację powoływać do .pdf, .xps i .cbz plików, także pliki z odpowiednimi typami MIME. Testy lokalne wydają się sugerować, że sekcja .pdf i application/pdf działają, ale spróbuj tak, jak być może, nie są to .xps (i prawdopodobnie .cbz).

Czy brakuje tu czegoś oczywistego? Czy każde działanie może mieć tylko jeden wzorzec MIME/plik?

Każda pomoc będzie mile widziana.

Dzięki,

Robin

+0

Która wersja Androida? Zauważyłem, że są tutaj różnice.Zobacz moje pytanie: http://stackoverflow.com/questions/20650378/how-did-intent-filter-change-from-android-2-to-android-4 – Martin

Odpowiedz

0

Czy każdy aktywny tylko jeden wzorzec/MIME pliku?

Nie. Według własnego uznania, dwa działają (PDF x 2).

Czy brakuje tu czegoś oczywistego?

Wątpię, czy element BROWSABLE zrobi ci dużo dobrego na tych, na których masz go, i potrzebujesz go dla innych. BROWSABLE jest dla przeglądarek, które będą przechodzić ścieżką typu MIME.

2

AFAIK, że wolałby być jak ten (jeden filtr z różnymi wartościami):

<intent-filter> 
     <action android:name="android.intent.action.VIEW"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <data android:mimeType="application/vnd.ms-xpsdocument"/> 
     <data android:mimeType="application/pdf"/> 
</intent-filter> 

Ponadto, możliwe jest, że typ MIME jest nieprawidłowy?

+0

Interesujące. Kiedyś próbowałem połączyć 'android: mimeType' i' android: pathPattern', a to nie działało. – Martin

+0

Dla 'android: pathPattern' wszystkie cztery atrybuty' 'muszą być ustawione w Androidzie 4. Twoja podpowiedź nie pomoże OP. – Martin

2

Wiele <data> to logiczne OR i traktowane osobno. Masz więc jeden tag z android:scheme, ale bez android:pathPattern i jeden z android:pathPattern, ale bez android:host i tak dalej. Więc żaden z tagów <data> nie jest kompletny i przyniesie coś dobrego.

Należy użyć:

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

Możesz mieć drugą <data> ale musiałaby wszystkie cztery atrybuty ponownie wszystkie cztery atrybuty są obowiązkowe z Androidem 4, jeżeli chcesz korzystać android:pathPattern. (Nie były to starsze wersje Androida).

+0

Witam Martina, jeśli używam powyższego filtra intencji, Moja aplikacja wyświetla się, gdy próbuję otworzyć aplikację Gmail z powiadomieniem. –

+0

Łączenie wielu tagów ** ** działa? Wykrywa tylko pierwszą dla mnie. –

Powiązane problemy