2012-02-09 1 views
7

Gents,multipli file di estensione/mimetype intent-filtri con un'attività

sto cercando di farlo in modo che la mia applicazione Android in grado di rispondere sia alle file che vengono aperti (via adeguata alle loro estensioni) e tipi MIME (quindi funzioneranno dal browser).

Ho seguito il consiglio qui:

Android intent filter for a particular file extension?

ma ancora non ha avuto fortuna.

La sezione pertinente dal mio file manifest di Android è la seguente:

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

Come potete vedere, vorrei l'applicazione ad essere invocate per .pdf, .xps e file .cbz, anche i file con i relativi mimetipi. I test locali qui sembrano suggerire che le sezioni .pdf e application/pdf funzionano entrambe, ma prova come potrei, le sezioni .xps (e presumibilmente .cbz) non lo sono.

Mi manca qualcosa di ovvio qui? Ogni attività può avere solo un modello mimetype/file?

Qualsiasi aiuto sarebbe molto apprezzato.

Grazie,

Robin

+0

Quale versione Android? Ho notato che ci sono delle differenze qui.Vedi la mia domanda: http://stackoverflow.com/questions/20650378/how-did-intent-filter-change-from-android-2-to-android-4 – Martin

risposta

0

possibile ogni attività avere un solo tipo MIME/modello del file?

No. Per vostra stessa ammissione, due stanno funzionando (PDF x 2).

Mi manca qualcosa di ovvio qui?

Dubito che l'elemento BROWSABLE ti farà molto bene su quelli che hai su, e ne hai bisogno per gli altri. BROWSABLE è per i browser, che andranno lungo il percorso del tipo MIME.

2

afaik, che preferiscono essere così (un filtro con i vari valori):

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

Inoltre, è possibile che il tipo MIME è corretta?

+0

Interessante. Una volta ho provato a combinare 'android: mimeType' e' android: pathPattern' e non ha funzionato. – Martin

+0

Per 'android: pathPattern' tutti e quattro gli attributi del tag' 'devono essere impostati in Android 4. Quindi il tuo suggerimento non aiuterà l'OP. – Martin

2

Più <data> sono logici OR e sono trattati separatamente. Quindi hai un tag con android:scheme ma senza android:pathPattern e uno con android:pathPattern ma senza uno android:host e così via. Quindi nessuno dei tag <data> è completo e andrà bene.

si dovrebbe usare:

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

Si può avere una seconda <data> ma avrebbe bisogno di nuovo tutti e quattro gli attributi come tutti i quattro attributi sono obbligatori con Android 4 se si desidera utilizzare android:pathPattern. (Non erano con versioni Android precedenti)

+0

Ciao Martin se utilizzo il filtro di cui sopra, La mia app viene visualizzata quando ho provato ad aprire l'app di Gmail dalla notifica. –

+0

La combinazione di più tag ** ** funziona? Rileva solo il primo per me. –