2012-09-21 21 views
8

questo è legato alla domanda how to open an attachment with my applicacion from within the email app? (mime type, intent filter ...) che pensavo di averlo risolto, ma non lo è.Registrati nuovo tipo mime in android

Ho trovato che alcuni client di posta elettronica (Samsung Galaxy SII integrato nel client di posta elettronica, ad esempio) non rispettano il metodo sendIntent.setType() e quando si aggiunge un allegato a un messaggio di posta elettronica non viene aggiunto il tipo mime specificato nel metodo setType. La conseguenza è che non riesco ad aprire l'allegato quando arriva l'email.

Quindi, per essere in grado di aprire un allegato da qualsiasi client di posta elettronica penso che l'unico modo che ho è quello di creare un nuovo tipo MIME che è associato alla mia estensione personalizzata.

Ma non riesco a trovare alcun modo per registrare un nuovo tipo MIME. So che può essere fatto come fanno alcune app (ASTRO File Explorer), ma non so dove altro cercare informazioni sull'aggiunta di un nuovo tipo MIME.

EDIT (2012, 1 ° ottobre) ASTRO File Explorer aggiunge solo i tipi mime per il suo processo. Non possono essere letti al di fuori del processo, quindi non ho alcun esempio in cui funzioni.

Ho guardato il codice sorgente MimeTypeMap e sembra che utilizzi solo un set predefinito di tipi MIME e non è possibile aggiungerne uno nuovo.

Ho provato a utilizzare il reflection (solo per verificare) ed è stato possibile aggiungere un tipo MIME, MA è visibile solo al mio processo, come se il mio processo avesse una sua copia di MimeTypeMap, quindi il client di posta non sarà ancora apri l'allegato.

qualcuno può aiutare?

grazie in anticipo

+0

Non credo sia possibile. Ho provato a guardare un po 'di tempo indietro e ho rinunciato. Sarebbe bello per me non essenziale. – Ifor

risposta

1

E 'la mia comprensione che la vostra specifica dei dati è la base unicamente sulla file di estensione .xyz. Quindi, quando lo si dichiara nel filtro intent, è necessario assicurarsi di essere il più generico possibile verso tutti i parametri tranne lo patternPath.

prova a dividerla in parecchi <data> tag e assicurarsi che sia agnostico verso la mimeType:

<data android:scheme="file" />        
    <data android:mimeType="*/*" /> 
    <data android:pathPattern=".*\\.xyz" /> 
    <data android:host="*" /> 

Vedi anche the documentation on <data> per assicurarsi che tutti i sottotipi corrispondono.

È a mia conoscenza che la struttura dati sottostante del file potrebbe causare problemi su alcuni dispositivi. Supponiamo ad esempio che il tuo tipo di file .xyz sia XML; il client di posta elettronica potrebbe pensare che fornire il tipo di mimo text/xml è più specifico di quello che hai dichiarato e invocarlo.

In questi casi, una soluzione potrebbe invece essere dichiarare più filtri di intent, includendo anche <data android:mimeType="text/xml" />. (Questo è più o meno in linea con ciò che suggerisce this answer.)

+0

Ho già provato questo e non ha funzionato anche per alcuni client di posta elettronica (SGII) – richardtz