2009-11-08 18 views
52

C'è un modo di utilizzare intent.setType() e fornire più tipi di dati generici (come immagini e)?Più tipi MIME in Android

Sto usando un ACTION_GET_CONTENT. Sembra che funzioni con solo tipi separati da virgole.

+1

Potrebbe essere più specifico. setType() su ... cosa? Per quale uso e scopo? Etc. – CommonsWare

+0

Hai già trovato un modo per farlo? –

risposta

4

Spiacenti, questo non è attualmente supportato. Avete due opzioni:

(1) Utilizzare un tipo MIME di */* e accettare che ci possano essere alcune cose che l'utente può scegliere che non sarà in grado di gestire (e avere un percorso di recupero decente per quello); oppure

(2) Implementare il proprio selettore di attività, effettuare chiamate dirette sul gestore pacchetti per ottenere le attività che possono gestire entrambi i tipi MIME per l'intento, unire tali elenchi e visualizzarli all'utente.

Inoltre, setType() non funziona affatto con i tipi separati da virgole. Deve essere uno e un solo tipo MIME.

+3

In realtà, sono supportati più tipi mime. L'hai mai provato ??? Ad esempio: image/*, video/* mostrerà foto e video ... – vchelbanster

19

In realtà, sono supportati più tipi di mime. L'hai mai provato ???

Ad esempio: intent.setType("image/*,video/*") visualizzerà foto e video ...

Per me funziona. Dovrebbe funzionare anche per te ...

+3

Questa soluzione funziona ... ma solo con applicazioni che consentono due tipi di mime. L'impostazione predefinita "Galleria" no. – Corbella

+0

In realtà, dipende dall'applicazione "Galleria" installata. Ci sono diverse versioni di loro distribuite con diverse ROM Android. – vchelbanster

+0

Funziona per me solo in casi minori. Le stesse immagini potrebbero o potrebbero non essere selezionabili. Android 5.0.1 – Ingweland

0

per il mio lavoro con punto e virgola.

Esempio:

intent.setType("image/*;video/*") 

o

sIntent.putExtra("CONTENT_TYPE", "image/*;video/*"); 
61

In Android 4.4 quando si utilizza il Storage Access Framework è possibile utilizzare il EXTRA_MIME_TYPES passare più tipi MIME.

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
intent.addCategory(Intent.CATEGORY_OPENABLE); 
intent.setType("*/*"); 
String[] mimetypes = {"image/*", "video/*"}; 
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); 
startActivityForResult(intent, REQUEST_CODE_OPEN); 
+0

Questo è perfetto. –

+3

Questo non funziona in Android 7.0. Mostra solo video. – clocksmith

+0

@clocksmith Sembra funzionare bene sul mio Nexus 9 con Android 7.0. –

2

è possibile passare più tipi di mime se si separa con |

Intent.setType("application/*|text/*"); 
0

Per me quello che ha funzionato meglio doveva:

intent.setType("*/*"); 
intent.addCategory(Intent.CATEGORY_OPENABLE); 


È possibile aggiungere diversi tipi MIME come questo

intent.setType("image/*|application/pdf|audio/*"); 

Ma Scelta intento sarà solo le applicazioni di visualizzazione che può gestire le immagini perché è il primo nella stringa del tipo mime.

Tuttavia, se è installato un gestore di file (ho provato con il file manager CyanogenMod) è possibile scegliere un file audio o pdf o un'immagine.

Se il tipo MIME audio è il primo, in questo modo:

intent.setType("audio/*|image/*|application/pdf"); 

Il selettore intento mostrerà solo le applicazioni che gestiscono l'audio.
Sempre utilizzando il file manager è possibile selezionare un'immagine o pdf o audio.