2009-12-07 7 views
9

Je suis en train de permettre à l'utilisateur de choisir un morceau particulier des médias avec mon application Android en utilisant la méthode décrite ici: Access pictures from Pictures app in my android appAccès vidéos et photos sur Android 1.5 +

Il fonctionne très bien, sauf pour la fait que je peux apparemment choisir seulement entre la vidéo ou la photo pour présenter l'utilisateur, pas les deux en même temps. Y at-il une bonne façon de le faire avec:

startActivityForResult (nouvelle intention (Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_IMAGE);

Merci!

+0

Pour ajouter l'insulte à l'injure - quand j'utilise la méthode avec la vidéo - il permettra pas réellement à l'utilisateur de choisir les médias - il joue juste quand ils le sélectionner - et il ne montrera pas les vignettes. Est-ce que je vais réécrire la galerie? Y at-il un moyen que je peux appeler Gallery et ensuite l'avoir retourné l'Uri pour un média sélectionné ??? – FunnyLookinHat

Répondre

17

Je l'ai utilisé plusieurs fois. La meilleure façon est quelque chose comme:

Intent mediaChooser = new Intent(Intent.ACTION_GET_CONTENT); 
//comma-separated MIME types 
mediaChooser.setType("video/*, images/*"); 
startActivityForResult(mediaChooser, 1); 

Même si ce n'est pas tout à fait exact, il a bien fonctionné dans tout ce que je l'ai utilisé dans Il ouvrira une activité Galerie-esque avec une liste des vignettes de. chaque image/vidéo dans la galerie de l'utilisateur. L'intention retournée à onActivityResult() a un extra appelé "DATA" qui sera un contenu: // URI au média sélectionné.

EDIT: oups, pour obtenir l'URI aux médias sélectionnés que vous voulez réellement appeler getData() sur l'intention qui est passé à onActivityResult()

+2

Robert - Pour une raison quelconque, chaque fois que j'utilise la ligne suivante, j'ai un sélecteur vide: mediaChooser.setType ("video/*, images/*"); J'ai aussi essayé cela sans aucune chance ... mediaChooser.setType ("video/*, image/*"); Cependant, chacun fonctionne individuellement correctement ... c'est-à-dire mediaChooser.setType ("video/*"); mediaChooser.setType ("image/*"); Pourriez-vous coller un extrait de code exact qui fonctionne? **** EDIT - On dirait que cela ne fonctionne plus après la version 2.0 – FunnyLookinHat

+3

Hi! J'utilise android 1.6 et ce n'est pas fonctionne! Seules les images ou seulement les vidéos sont correctes. Une idée? – Karoly

+1

Ne fonctionne pas sur 2.3 –

1

Kivy - La meilleure façon est de créer une intention pour sélectionner un morceau de médias et de le restreindre à la vidéo:

Intent pickMedia = new Intent(Intent.ACTION_GET_CONTENT); 
pickMedia.setType("video/*"); 
startActivityForResult(pickMedia,12345); 

Remarque - 12345 est l'entier que votre application doit écouter sur un rappel de demande afin que vous puissiez envoyer tout information que vous recevez chaque fois que vous avez besoin.

Vous devez alors avoir aussi cette même activité écoutant les informations à renvoyer de cette intention:

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == 12345) { 
      if (resultCode == Activity.RESULT_OK) { 
       Uri selectedVideoLocation = data.getData(); 

       // Do something with the data... 
      } 

     } 
    } 

cool?

+1

La question était sur l'accès aux vidéos et aux photos - et pas seulement les vidéos. La réponse que vous avez donnée ne concerne que la vidéo. –

+0

Malheureusement, vous ne pouvez pas faire cela dans Android 2.0+ - la fausse méthode de mediaChooser.setType ("video/*, images/*"); ne fonctionnera pas, et à moins que vous ne créiez votre propre activité de sélecteur qui recherche des médias et les renvoie vers un écran de sélection, le mieux que vous obtiendrez est de donner à l'utilisateur le choix entre une image de vidéo. – FunnyLookinHat

+0

Je ne sais pas ce qu'ils ont fait en 4.2.x, mais en choisissant plusieurs types mime semble fonctionner très bien :) –

1
intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
startActivityForResult(intent, 1); 
1

Essayez cette

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("*/*"); 
startActivityForResult(intent, 101); 
Questions connexes