MediaPlayer setDatasource给出错误,即使我正在做MediaPlayer.重置每当我点击任何歌曲s



帮助我,我被困在这个,mediaPlayer.setDataSource()在点击回收器视图中的任何歌曲列表时给出错误。我是Android Studio的新手,因为我去年才开始使用它。这是在我的应用程序

发生的视频
java.lang.IllegalStateException
at android.media.MediaPlayer._setDataSource(Native Method)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1296)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1279)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1261)
at android.media.MediaPlayer.attemptDataSource(MediaPlayer.java:1155)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1112)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1019)
at com.example.musify.MainActivity$10.run(MainActivity.java:454)
at java.lang.Thread.run(Thread.java:919)**

onchanged方法setDataSource:

@Override
public void onChanged(int position) {
currentSongNumber = position;
CreateNotification.createNotification(MainActivity.this,musicLists.get(currentSongNumber),R.drawable.ic_baseline_pause_24,currentSongNumber,musicLists.size()-1);

if(mediaPlayer.isPlaying())
{
mediaPlayer.pause();
mediaPlayer.stop();
}

new Thread(new Runnable() {
@Override
public void run() {
try {
mediaPlayer.reset();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//this is the place where i am getting error although i have reset on instance of mediaplayer
mediaPlayer.setDataSource(MainActivity.this, musicLists.get(currentSongNumber).getMusicFile());

MainActivity.this.runOnUiThread(() -> {
//                    musicbar_artist.setText(musicLists.get(currentSongNumber).getArtist());
musicbar_name.setText(musicLists.get(currentSongNumber).getTitle());
});

} catch (IOException e) {
new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(MainActivity.this, "Unable to Play Track!", Toast.LENGTH_SHORT).show());
e.printStackTrace();
}
try {
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
final int getTotalDuration = mp.getDuration();

String generateDuration = String.format(Locale.getDefault(),"%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes(getTotalDuration),
TimeUnit.MILLISECONDS.toSeconds(getTotalDuration)-
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(getTotalDuration)));
endTime.setText(generateDuration);
isPlaying = true;
mp.start();
playSeekbar.setMax(getTotalDuration);
playpauseImage.setImageResource(R.drawable.pause_svg);
}
});
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
final int getCurrentDuration = mediaPlayer.getCurrentPosition();
String generateDuration = String.format(Locale.getDefault(),"%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes(getCurrentDuration),
TimeUnit.MILLISECONDS.toSeconds(getCurrentDuration)-
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(getCurrentDuration)));
playSeekbar.setProgress(getCurrentDuration);
startTime.setText(generateDuration);
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mediaPlayer.reset();
String tm = "00:00";
startTime.setText(tm);
timer.purge();
timer.cancel();
isPlaying = false;
playpauseImage.setImageResource(R.drawable.ic_baseline_play_arrow_24);
playSeekbar.setProgress(0);
musicAdapater.update(musicLists);
musicRecyclerV.scrollToPosition(0);
// starts next music
onNext();
}
});
}
},1000,1000);
}
@Override
public void onPlay() {
CreateNotification.createNotification(MainActivity.this,musicLists.get(currentSongNumber),R.drawable.ic_baseline_pause_24,currentSongNumber,musicLists.size()-1);
isPlaying = true;
playpauseImage.setImageResource(R.drawable.pause_svg);
mediaPlayer.start();
musicLists.get(currentSongNumber).setPlaying(true);
musicbar_name.setText(musicLists.get(currentSongNumber).getTitle());
//        musicbar_artist.setText(musicLists.get(currentSongNumber).getArtist());
musicAdapater.update(musicLists);
musicRecyclerV.scrollToPosition(currentSongNumber);
onChanged(currentSongNumber);
}
@Override
public void onPrev() {
int prevsongnumber = currentSongNumber-1;
if(prevsongnumber<0)
{
prevsongnumber = musicLists.size()-1;
}
CreateNotification.createNotification(MainActivity.this,musicLists.get(prevsongnumber),R.drawable.ic_baseline_pause_24,prevsongnumber,musicLists.size()-1);
musicLists.get(currentSongNumber).setPlaying(false);
musicLists.get(prevsongnumber).setPlaying(true);
musicbar_name.setText(musicLists.get(prevsongnumber).getTitle());
//        musicbar_artist.setText(musicLists.get(prevsongnumber).getArtist());
musicAdapater.update(musicLists);
musicRecyclerV.scrollToPosition(prevsongnumber);
onChanged(prevsongnumber);
}
@Override
public void onPaused() {
CreateNotification.createNotification(MainActivity.this,musicLists.get(currentSongNumber),R.drawable.ic_baseline_play_arrow_24,currentSongNumber,musicLists.size()-1);
isPlaying = false;
mediaPlayer.pause();
playpauseImage.setImageResource(R.drawable.ic_baseline_play_arrow_24);
}
@Override
public void onNext() {
int nextsongnumber = currentSongNumber+1;
if(nextsongnumber>=musicLists.size())
{
nextsongnumber = 0;
}

CreateNotification.createNotification(MainActivity.this,musicLists.get(nextsongnumber),R.drawable.ic_baseline_pause_24,nextsongnumber,musicLists.size()-1);

musicLists.get(currentSongNumber).setPlaying(false);
musicLists.get(nextsongnumber).setPlaying(true);
musicbar_name.setText(musicLists.get(nextsongnumber).getTitle());
//        musicbar_artist.setText(musicLists.get(nextsongnumber).getArtist());
musicAdapater.update(musicLists);
musicRecyclerV.scrollToPosition(nextsongnumber);
onChanged(nextsongnumber);
}

MediaPlayer.create()优于setDatasource
从YouTube评论中得到的!!

if(mediaPlayer.isPlaying())
{
mediaPlayer.pause();
}
mediaPlayer.stop();
mediaPlayer.release();
// passing applicationContext() and uri file of currentsongnumber
mediaPlayer = MediaPlayer.create(MainActivity.this, musicLists.get(currentSongNumber).getMusicFile());
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
MainActivity.this.runOnUiThread(() -> {
//                    musicbar_artist.setText(musicLists.get(currentSongNumber).getArtist());
musicbar_name.setText(musicLists.get(currentSongNumber).getTitle());
});
try {
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}

相关内容

最新更新