android устанавливает панель поиска на начальную и переключает кнопку воспроизведения на паузу после окончания музыки

введите описание изображения здесь я разрабатываю медиаплеер с нуля, поэтому я застреваю в том, что когда песня заканчивает играть, я хочу установить панель поиска на начальное значение, я знаю, что это можно сделать с помощью

seekBar.setProgress(0), но это не работает со мной, и я хочу, чтобы кнопка воспроизведения переключилась обратно на кнопку паузы, и если пользователь снова воспроизведет песню, песня будет воспроизводиться нормально, вот мой код медиаплеера, и я надеюсь, что вы подскажите в чем логика и как ее разместить

public class MusicPlayerActivity extends AppCompatActivity implements Runnable,
        SeekBar.OnSeekBarChangeListener {
ImageView playpause;
SeekBar seekBar;
MediaPlayer mp = null;
int len = 0;
boolean isPlaying = false;


public MusicPlayerActivity() throws IOException {
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_music_player);
    String url = getIntent().getExtras().getString("musicurl");
    playpause = (ImageView)findViewById(R.id.imageView);
    seekBar = (SeekBar)findViewById(R.id.seekBar);
    playpause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if(!isPlaying){
                playpause.setImageResource(R.drawable.pause);
                mp.pause();
                len = mp.getCurrentPosition();
                seekBar.setEnabled(false);


            }else{
                playpause.setImageResource(R.drawable.play);
                mp.seekTo(len);
                mp.start();
                seekBar.setEnabled(true);

            }
            isPlaying = !isPlaying;



        }
    });

    mp = new MediaPlayer();
    try {
        mp.setDataSource(url);
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        mp.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
    //if(mp.isPlaying()) mp.stop(); mp.release();
    mp.start();
    seekBar.setMax(mp.getDuration());
    new Thread(this).start();
   // Toast.makeText(this, mp.getDuration(), Toast.LENGTH_SHORT).show();


}

//if(mp.isPlaying()){}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
                              boolean fromUser) {
    try {
        if (mp.isPlaying() || mp != null) {
            if (fromUser)
                mp.seekTo(progress);
        } else if (mp == null) {
            Toast.makeText(getApplicationContext(), "Media is not running",
                    Toast.LENGTH_SHORT).show();
            seekBar.setProgress(0);
        }
    } catch (Exception e) {
        Log.e("seek bar", "" + e);
        seekBar.setEnabled(false);

    }
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}

public void run() {
    int currentPosition = mp.getCurrentPosition();
    int total = mp.getDuration();

    while (mp != null && currentPosition < total) {
        try {
            Thread.sleep(1000);
            currentPosition = mp.getCurrentPosition();
        } catch (InterruptedException e) {
            return;
        } catch (Exception e) {
            return;
        }
        seekBar.setProgress(currentPosition);
    }
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            mp.stop();
            startActivity(new Intent(this,MainActivity.class));
            break;
    }
    return true;
}
@Override
public void onBackPressed() {
    Intent mainActivity = new Intent(Intent.ACTION_MAIN);
    mainActivity.addCategory(Intent.CATEGORY_HOME);
    mainActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(mainActivity);
}

}


person André Abboud    schedule 15.10.2017    source источник


Ответы (2)


Вы не устанавливаете слушателя: seekbar.setOnSeekBarChangeListener(this)

person Omar Aflak    schedule 15.10.2017

Добавьте seekbar.setOnSeekBarChangeListener(this); в свой onCreate, иначе onProgressChanged() не будет вызываться.

Чтобы сбросить индикатор выполнения, рассмотрите следующий подход:

Установите OnCompletionListener в вашем экземпляре медиаплеера. Когда медиафайл завершит воспроизведение, вы можете выполнить необходимые действия в функции обратного вызова OnCompletion(MediaPlayer mp).

Добавление следующего фрагмента кода перед mp.start() должно работать на вас.

mp.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                seekBar.setProgress(0); // sets seekbar to initial position.
                toggleViews();//implement this function to toggle your play/pause button

            }

        });
person Iffat Fatima    schedule 15.10.2017