приложение работает нормально, моя единственная проблема в том, что я не хочу ставить кнопку остановки, а я хочу, чтобы по умолчанию backPress остановил и отпустил MediaPlayer, поэтому я добавил это: время, но при повторном нажатии sh приложение
2020-07-10 16:23:54.943 6315-6315/com.example.schoolwork E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.schoolwork, PID: 6315
java.lang.IllegalStateException
at android.media.MediaPlayer.getCurrentPosition(Native Method)
at com.example.schoolwork.play_bidlisiw1.changeSeekbar(play_bidlisiw1.java:63)
at com.example.schoolwork.play_bidlisiw1.access$200(Play_bidlisiw1.java:12)
at com.example.schoolwork.play_bidlisiw1$3.run(play_bidlisiw1.java:69)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
Я новичок в кодировании java и новичок в использовании android studio. Я надеюсь, что кто-нибудь сможет меня научить. Спасибо за совет.
public class ark_play_bidlisiw1 extends AppCompatActivity implements View.OnClickListener {
private Button btnFor, btnBack, btnPlay;
private SeekBar seekBar;
private MediaPlayer mediaPlayer;
private Runnable runnable;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.play_bidlisiw1);
btnPlay = findViewById(R.id.btnPlay);
btnBack = findViewById(R.id.btnBack);
btnFor = findViewById(R.id.btnFor);
handler = new Handler();
seekBar = findViewById(R.id.seekbar);
mediaPlayer = MediaPlayer.create(this, R.raw.bidlisiw1);
btnFor.setOnClickListener(this);
btnBack.setOnClickListener(this);
btnPlay.setOnClickListener(this);
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
seekBar.setMax(mediaPlayer.getDuration());
mediaPlayer.start();
changeSeekbar();
}
});
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
if(b){
mediaPlayer.seekTo(i);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
private void changeSeekbar() {
seekBar.setProgress(mediaPlayer.getCurrentPosition());
if(mediaPlayer.isPlaying()){
runnable = new Runnable() {
@Override
public void run() {
changeSeekbar();
}
};
handler.postDelayed(runnable, 1000);
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btnPlay:
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
btnPlay.setText(">");
}else {
mediaPlayer.start();
btnPlay.setText("||");
changeSeekbar();
}
break;
case R.id.btnFor:
mediaPlayer.seekTo(mediaPlayer.getCurrentPosition()+5000);
break;
case R.id.btnBack:
mediaPlayer.seekTo(mediaPlayer.getCurrentPosition()-5000);
break;
}
}
public void onBackPressed(){
super.onStop();
mediaPlayer.release();
}
}