2

c'est l'intention qui ouvre un chooser de l'application musicaleAndroid - Comment créer MediaPlayer d'un utilisateur morceau sélectionné

public void launchMusicPlayer(View view) { 
     Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(i,1); 
    } 

et au-dessous est le code onActivityResult pour essayer d'obtenir la chanson , mais le problème est que le bouton de test lorsqu'il est pressé, ne joue rien et comme je suis nouveau au codage je ne sais pas ce que je fais mal.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK && requestCode == 1) { 
     final MediaPlayer testSong = new MediaPlayer(); 
     Uri songUri = data.getData(); 

      try { 
       testSong.setDataSource(this, songUri); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     testSong.prepareAsync(); 

     test.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       testSong.start(); 
      } 
     }); 
    } 
} 

Répondre

1

La question peut-être parce que prepareAsync() est asynchrone, le MediaPlayer peut ne pas être prêt lorsque vous appelez start(). Il y a 2 façons de résoudre ce:

  1. Utilisation prepare() au lieu de prepareAsync()

    test.setOnClickListener(new View.OnClickListener() { 
    
        @Override 
        public void onClick(View v) { 
         testSong.prepare(); 
         testSong.start(); 
        } 
    }); 
    
  2. appel méthode start() à l'intérieur setOnPreparedListener()

    test.setOnClickListener(new View.OnClickListener() { 
    
        @Override 
        public void onClick(View v) { 
         testSong.prepareAsync(); 
         testSong.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
    
          @Override 
          public void onPrepared(MediaPlayer player) { 
           player.start(); 
          } 
         } 
    }); 
    

Référez-vous à la documentation ici http://developer.android.com/reference/android/media/MediaPlayer.html

+0

Merci. J'ai essayé votre méthode mais toujours le même problème. J'ai donc fait un onClickListener pour le bouton dans onCreate d'activité pour lire une chanson spécifique du dossier raw et cela fonctionne. Mais si je choisis une chanson du sélecteur, alors j'appuie sur le bouton de test pour lire la chanson du dossier brut, ce qui signifie qu'elle ne lit même pas le paramètre onActivityResult alors que dois-je faire? @Tony Vu ​​ –

+0

Oh, ce sera une question différente de votre message original. Quoi qu'il en soit, je pense que le problème est avec l'Uri retourné par data.getData(). Il peut avoir besoin d'un traitement avant de passer à setDataSource(). Vous pouvez essayer les méthodes recommandées par ce fil http://stackoverflow.com/questions/17042308/select-a-music-file-to-play-with-mediaplayer –

+0

Merci @Tony Vu ​​Je l'ai eu pour travailler avec le dernière réponse dans cette question –