4

As title says, the onPrepared() overridden method is not being called.

mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(new OnPreparedListener(){
   @Override
   public void onPrepared(MediaPlayer mp){
      if (mp.equals(mediaPlayer)) isReady_mediaPlayer = true;

      Log.e("I", "Media player has been loaded to memory !");
   }
});

mediaPlayer = MediaPlayer.create(this, R.raw.my_sound_mp3);
Zbarcea Christian
  • 9,367
  • 22
  • 84
  • 137

1 Answers1

7

It's because you are creating a new MediaPlayer object. This one does not have any onPreparededListener set on it.

Here you create and assign a MediaPlayer object:

mediaPlayer = new MediaPlayer();

Next you set an onPreparedListener on it.

But then you create and assign a new one! This assignment overrides your previous lines.

mediaPlayer = MediaPlayer.create(this, R.raw.my_sound_mp3);

This one has no onPreparedListener set on it.

To fix, don't use the create method, use setDataSource instead

AssetFileDescriptor afd = context.getResources().openRawResourceFd(R.raw.my_sound_mp3);
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(new OnPreparedListener(){
    @Override
    public void onPrepared(MediaPlayer mp){
       if (mp.equals(mediaPlayer)) isReady_mediaPlayer = true;
       Log.e("I", "Media player has been loaded to memory !");
    }
});
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mediaPlayer.prepare();
Ken Wolf
  • 23,133
  • 6
  • 63
  • 84
  • What if I pass the MediaPlayer.create(... first instead of the MediPlayer() constructor? – Zbarcea Christian Jul 27 '13 at 07:20
  • Think of `MediaPlayer.create()` as a utility method that creates a new Mediaplayer object, sets the datasource, then calls prepare. All in one go. There is no way to short-circuit that. Juse use `setDataSource`, I have included it above. You can even see it in the source code: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/media/MediaPlayer.java#MediaPlayer.create%28android.content.Context%2Candroid.net.Uri%2Candroid.view.SurfaceHolder%29 – Ken Wolf Jul 27 '13 at 07:22
  • I know this is old but I am using the code from this post and inside the onPrepared() I try mediaPlayer.start() and file does not play? – andrewb Oct 29 '15 at 23:53