Search code examples
androidmedia-playermultiple-instances

Multiple instance of media player issue in android


I am working with MediaPlayer in Android. I have all the list of songs name and URLs of songs from server. when I click on any item a song from server is played in MediaPlayer. Here is my code for playing song on click of "Listview" item.

    txtEndTimingForMediaPlayer.setText("");
    txtStarTimingForMediaPlayer.setText("");
    seekBarPlayer.setProgress(0);
 // this code is for stop current playing song and release media player
    if(mediaPlayer!=null && mediaPlayer.isPlaying()){
        mediaPlayer.stop();
        mediaPlayer.reset();
        mediaPlayer.release();
        mediaPlayer=null;
    }

    // start new song for play
    mediaPlayer=new MediaPlayer();
    Uri myUri1 = Uri.parse(url);

    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    try {
        mediaPlayer.reset();
        mediaPlayer.setDataSource(getActivity(), myUri1);
        mediaPlayer.prepareAsync();

        mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer player) {
                playPause=true;
                player.start();
                mediaFileLengthInMilliseconds = player.getDuration(); 
            }
        });

        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                playPause=false;
                btnPlayPause.setBackgroundResource(R.drawable.icon_play);                   
            }
        });
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }  

Now issue with this code is when I click continuously on song, then same song plays multiple time. how to avoid this multiple instance issue.


Solution

  • I think if(mediaPlayer!=null && mediaPlayer.isPlaying()) is not true when you click too fast to play same song and then mediaPlayer=new MediaPlayer(); is creating new instance and play song, which will result in hearing same song multiple times. debug and check if code enter that if (condition)