web-dev-qa-db-fra.com

Plusieurs types MIME dans Android

Existe-t-il un moyen d'utiliser intent.setType() et de fournir plusieurs types larges (comme des images et vidéo)?

J'utilise un ACTION_GET_CONTENT. Il semble fonctionner uniquement avec des types séparés par des virgules.

66
James

Dans Android 4.4 lors de l'utilisation de Storage Access Framework vous pouvez utiliser 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);
94
Fred

En fait, plusieurs types MIME sont pris en charge. L'avez-vous même essayé ???

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

Pour moi ça marche. Cela devrait aussi marcher pour vous ...

[MODIFIER]: Cela fonctionne partiellement, car toutes les applications de galerie ne choisissent pas d'implémenter la prise en charge de plusieurs types de filtres mime.

20
vchelbanster

Pour moi, ce qui a le mieux fonctionné, c'est:

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


Vous pouvez ajouter plusieurs types MIME comme celui-ci

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

Mais le sélecteur d'intention n'affichera que les applications qui peuvent gérer les images car c'est la première de la chaîne de type mime.

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

Si le type de mime audio est le premier, comme ceci:

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

Le sélecteur d'intention n'affichera que les applications qui gèrent l'audio.
En utilisant à nouveau le gestionnaire de fichiers, vous pouvez sélectionner une image ou un fichier pdf ou audio.

4
Raimundo

Désolé, ce n'est pas pris en charge actuellement. Vous avez deux options:

(1) Utilisez un type MIME de */* Et acceptez que l'utilisateur puisse choisir certaines choses que vous ne pourrez pas gérer (et avoir un chemin de récupération décent pour cela); ou

(2) Implémentez votre propre sélecteur d'activité, en faisant des appels directs sur le gestionnaire de packages pour obtenir les activités pouvant gérer les deux types MIME à des fins précises, en fusionnant ces listes et en les affichant à l'utilisateur.

De plus, setType() ne fonctionne pas du tout avec les types séparés par des virgules. Il doit s'agir d'un et d'un seul type MIME.

3
hackbod

vous pouvez passer plusieurs types MIME si vous vous séparez avec |

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