0

I am using this Media-Player-Looping concept: loop-concept I dont know how to pause this loop. When i am using setNextMediaPlayer(null) it will pause after finishing the current audio-file. But that is too late. Has anybody a hint for me?

Edit:

Here is my code:

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    mp = new MediaPlayer(); 
    mp2 = new MediaPlayer();    //workarround f gapless looping
    setDisc("classic");
    ...
    throttle = (Switch) findViewById(R.id.throttle);
    throttle.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            setDisc(curTitle);
        }
    });
    throttle.setChecked(false);
    ...
    onoff = (ToggleButton) findViewById(R.id.onoff);
    onoff.setChecked(false);
    onoff.setOnClickListener(this);
    ...
}

public void setDisc(String s){
    String tmp = "";
    if(throttle.isEnabled()==true && throttle.isChecked())
        tmp="2";
    myUri = getUri(s+tmp);
    curTitle=s;
    curPow=tmp;
    try {
        mp.reset();
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mp.setDataSource(context, myUri);
        mp.prepareAsync();

        mp2.reset();
        mp2.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mp2.setDataSource(context, myUri);
        mp2.prepareAsync();
        mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mp2.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        setMyLoop();
                        play();
                    }
                });
            }
        });
    } catch (...) {
        ...Exception Handling...
    }
}

public void setMyLoop(){
    /*Gapless Looping*/
    final AssetFileDescriptor afd = getResources().openRawResourceFd(getRawId(this, curTitle.concat(curPow)));
    mp.setNextMediaPlayer(mp2);
    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
            mediaPlayer.reset();
            try {
                mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                mediaPlayer.prepare();
            } catch (Exception e) {
                Toast.makeText(context, getResources().getString(R.string.error1), Toast.LENGTH_LONG).show();
            }
            mp2.setNextMediaPlayer(mp);
        }
    });
    mp2.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
            mediaPlayer.reset();
            try {
                mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                mediaPlayer.prepare();
            } catch (Exception e) {
                Toast.makeText(context, getResources().getString(R.string.error2), Toast.LENGTH_LONG).show();
            }
            mp.setNextMediaPlayer(mp2);
        }
    });
}

public void play(){
    if(onoff.isChecked()){
        mp.start();
    }
}

@Override
public void onClick(View v) {
    if(v == onoff){     
        if(onoff.isChecked()==false){
            mp.setNextMediaPlayer(null);
            mp2.setNextMediaPlayer(null);
        }
        else{
            mp.setNextMediaPlayer(mp2);
            mp2.setNextMediaPlayer(mp);
            mp.start();
        }
    }
    ...
}
Community
  • 1
  • 1
skymedium
  • 767
  • 7
  • 26
  • follow this document http://developer.android.com/reference/android/media/MediaPlayer.html call pause() method where you want to pause your mediaPlayer – rogerwar Feb 24 '15 at 10:45
  • In this document i found: "The next player must be prepared by the app, and the application should not call start() on it". So i can pause player2 too? Like this... if(mp1.isplaying()) mp1.pause(); elseif(mp2.isplaying()) mp2.pause(); – skymedium Feb 24 '15 at 15:10
  • i shared my code. thx for your reply! – skymedium Feb 24 '15 at 18:17
  • How many audio file you have 1 or 2 ?reading your code its not clear can you put comment on methods? – rogerwar Feb 24 '15 at 23:55

1 Answers1

0

I figured it out:

/*Media Player stopping*/
public void mpAnhalten(){
    if(mp2.isPlaying()){
        mp2.pause();
        curMP=true;
    }
    else {
        if(mp.isPlaying()){
            mp.pause();
        }
        curMP=false;
    }
}

/*Media Player starting*/
public void mpStarten(){
    if(curMP==true)
        mp2.start();
    else
        mp.start();
}

And I changed all prepareAsync() into prepare(). Now its working.

skymedium
  • 767
  • 7
  • 26