2009-11-08 3 views
52

Existe-t-il un moyen d'utiliser intent.setType() et de fournir plusieurs types larges (comme les images et vidéo)? J'ai utilisé un ACTION_GET_CONTENT. Il semble fonctionner avec des types séparés par des virgules.Plusieurs types MIME dans Android

+1

Pourriez-vous être plus précis? setType() sur ... quoi? Pour quel usage et quel but? Etc. – CommonsWare

+0

Avez-vous déjà trouvé un moyen de le faire? –

Répondre

4

Désolé, cela n'est actuellement pas supporté. Vous avez deux options:

(1) Utilisez un type MIME de */* et acceptez qu'il y ait des choses que l'utilisateur peut choisir que vous ne pourrez pas gérer (et que vous ayez un chemin de récupération décent pour cela); ou

(2) Implémentez votre propre sélecteur d'activités, en effectuant des appels directs sur le gestionnaire de paquets pour obtenir les activités qui peuvent gérer les deux types MIME pour l'intention, fusionner ces listes et les afficher à l'utilisateur.

De plus, setType() ne fonctionne pas du tout avec des types séparés par des virgules. Ce doit être un et un seul type MIME.

+3

En fait, plusieurs types MIME sont supportés. Avez-vous déjà essayé? Par exemple: image/*, video/* affichera des photos et des vidéos ... – vchelbanster

19

En fait, plusieurs types MIME sont pris en charge. Avez-vous déjà essayé?

Par exemple: intent.setType("image/*,video/*") affichera des photos et des vidéos ...

Pour moi, cela fonctionne. Cela devrait fonctionner pour vous aussi ...

+3

Cette solution fonctionne ... mais seulement avec des applications qui permettent deux types MIME. Le défaut "Galerie" ne le fait pas. – Corbella

+0

En fait, cela dépend de l'application "Galerie" que vous avez installée. Il existe différentes versions d'entre eux étant distribués avec différentes ROM Android. – vchelbanster

+0

Fonctionne pour moi dans les cas mineurs seulement. Les mêmes images peuvent être sélectionnables ou non. Android 5.0.1 – Ingweland

0

pour mon travail avec les points-virgules.

Exemple:

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

ou

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

Dans Android 4.4 lorsque vous utilisez le Storage Access Framework vous pouvez utiliser le EXTRA_MIME_TYPES pour passer plusieurs types 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

Celui-ci est parfait. –

+3

Cela ne fonctionne pas avec Android 7.0. Affiche uniquement les vidéos. – clocksmith

+0

@clocksmith Il semble fonctionner correctement sur mon Nexus 9 avec Android 7.0. –

2

vous pouvez transmettre plusieurs types mime si vous vous séparez avec |

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

Pour moi, ce qui fonctionne le mieux était:

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


Vous pouvez ajouter plusieurs types MIME comme celui-ci

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

Mais CHOOSER intention ne fera que des applications d'affichage qui peut gérer les images car c'est le premier dans la chaîne de type mime.

Toutefois, si vous avez un gestionnaire de fichiers installé (j'ai testé avec le gestionnaire de fichiers CyanogenMod), vous pouvez choisir un fichier qui est audio ou pdf ou une image.

Si le type MIME audio est le premier, comme celui-ci:

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

L'intention chooser affiche uniquement les applications qui gèrent audio.
Encore une fois en utilisant le gestionnaire de fichiers, vous pouvez sélectionner une image ou pdf ou audio.