2011-11-16 10 views
14

Ho un'applicazione Android con filtro intent (ACTION_VIEW) per aprire il file e importarlo nella mia applicazione. Desidero scaricare l'allegato di file dall'app gmail nella mia applicazione. Alcuni tipi di file (ad esempio jpg, png, txt) vengono salvati correttamente, ma alcuni non lo sono (cioè doc, xls, ppt). Credo di avere il filtro degli intenti corretto per la mia attività poiché funziona da un'altra app (cioè dropbox), ma non dall'app gmail. C'è qualche soluzione per questo ?Filtro Intent per scaricare allegati da app gmail su Android

risposta

7

sono stato in grado di fare il download e anteprime pulsanti pop-up su Android in GMail rimuovendo il filtro dei dati regime nel mio intento (cancellare la linea schema e fare un tentativo):

<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=".*\\.ext" /> 
<data android:host="*" /> 
</intent-filter> 

Tuttavia, come per la documentazione di Android, "Se uno schema non è specificato per il filtro intent, tutti gli altri attributi URI vengono ignorati." Con lo schema e gli attributi URI rimossi, l'unico altro modo per filtrare gli intenti è usare il tipo Mime, e sappiamo tutti che le estensioni di file personalizzate non hanno tipi mime registrati.

Per riferimento, URI sono della forma:

  • schema: // host: porta/percorso
  • Pathprefix
  • pathPattern

Così senza uno schema, tutto questo gocce. Dopo aver scoperto quanto sopra, ho provato l'ovvio - usa un "*" per lo schema, e anche provato ". *". Nessuno dei due ha funzionato. Spero che qualcun altro possa costruirsi le mie prove. Ma credo che abbia a che fare con la scelta dello schema corretto. Sfortunatamente, gli unici schemi che conosco sono http https content and file, e nessuno dei precedenti è il magic bullet.

EDIT ::::::::

ho risolto questo ieri. Si prega di consultare la mia soluzione:

<intent-filter> 
<action android:name="android.intent.action.VIEW" /> 
<category android:name="android.intent.category.DEFAULT" /> 
<data android:mimeType="application/*" host="*" android:pathPattern=".*.ext" android:scheme="content" /> 
</intent-filter> 

Questo intento causerà gmail per visualizzare i pulsanti di download/Preview. In effetti, ciò causerà l'apertura della tua app anche quando i file .ext vengono inviati come allegati al normale client di posta elettronica.

+0

Quale autorizzazione è necessaria per leggere l'app URI 'contenuto' di GMail pubblicato dal pulsante Anteprima? La mia app non ha permessi e quando provo ad aprirla ottengo un'eccezione senza permessi. Non ho problemi a leggere i dati del 'file' pubblicati dal pulsante Download.Utente – user1139880

+0

- nessuna idea. Ho le seguenti autorizzazioni nella mia app, ma le ho aggiunte a causa di usi diversi, non per l'anteprima/il download di GMail. Puoi verificare anche che l'intento che ho postato causa la visualizzazione dell'anteprima/download di Gmail? So che l'ho provato io stesso nel sandwich Froyo, Gingerbread e Ice Cream e ha funzionato per me in tutti loro. –

+2

Questo è il motivo per cui il mio intento filtrare si attiva ogni volta che ottengo un nuovo gmail nella mia barra delle notifiche e vado ad aprirlo. Qualcun altro ha questo problema? È sicuramente questo filtro a causarlo. – BriCo84

0

Poiché questa è una delle domande principali su google correlate a "filtro degli intenti degli allegati di Gmail" e ho trovato la risposta di cui sopra non funziona nel mio caso pubblico il risultato della mia ricerca.

Per registrarsi sulla intenti da Gmail, abbiamo bisogno di sostenere schema di contenuti:

<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="content" android:mimeType="*" android:host="*" /> 
</intent-filter> 

In caso di allegati che ho provato, URI non conteneva estensione del file, anche se è stato visualizzato in Gmail, quindi uso di android: pathPattern ha bloccato la ricezione di intenti di Gmail.

A causa del fatto che registrarsi a tutti i mimeTypes è eccessivo, ho eseguito il debug dei contenuti dell'oggetto Intent (sul lato Java) e ho scoperto che nella mia applicazione text/plain è sufficiente (quindi i tuoi compiti sono trovare i mimeTypes appropriati per la tua applicazione). Il mio filtro intent-final finale è il seguente:

<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="content" android:mimeType="text/plain" android:host="*" /> 
</intent-filter> 
+0

Che dire ** android: scheme = "file" **. Non è necessario? –

Problemi correlati