我正在使用实时流式广播Android应用程序...当我到达列表的末尾时,我有一个带有4个曲目的数组,假设下一个按钮将表示"最后一个"歌曲"但是没有崩溃,
这是按钮代码:
counter=0;
mediaPlayer=new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
btn_next.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if (counter < songurl.length) {
counter = counter + 1;
textview.setText(songurl[counter]);
try {
mediaPlayer.reset();
} catch (Exception ex) {
try {
mediaPlayer.setDataSource(songurl[counter]);
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
} else {
Toast.makeText(MainActivity.this, "last song", Toast.LENGTH_SHORT).show();
}
}
});
另一个问题...如果我想在应用程序到达最后一首歌时想让它成为一个封闭的循环,我想按下旁边,从一开始就启动列表?谢谢。
您只需在代码中添加一个Modulo(%)操作员
counter = counter++ % songurl.length
如果其他块,则无需添加额外的
btn_next.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
counter = counter++ % songurl.length
textview.setText(songurl[counter]);
try {
mediaPlayer.reset();
} catch (Exception ex) {
try {
mediaPlayer.setDataSource(songurl[counter]);
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
}
});
您遇到的一个问题是,您在检查它在范围之内之后就会增加计数器,这意味着您的安全检查是没有用的。将counter = counter + 1;
移至IF语句的末尾。
至于连续使其循环,您可以在IF语句主体末尾将其更改为counter = (counter + 1) % songurl.length;
。
除了您问的问题的范围之外,您对MediaPlayer
的使用存在一些问题。在捕获语句中拥有这么多关键逻辑是没有意义的。这意味着您期望例外发生。您应该重新考虑您在那里做什么。
您在捕获块中看到您称为MediaPlayer.setDatasource(Songurl [Counter])。如果您致电MediaPlayer.Reset()
时,该怎么办尝试以下操作:
try{
mediaPlayer.reset();
mediaPlayer.setDataSource();
mediaPlayer.prepareAsync();--or mediaPlayer.prepare();
(It depends on whether you load the url on the internet)
mediaPlayer.start(); -- if you call mediaPlayer.prepareAsync() you should call mediaPlayer.start() at the OnPreparedListener;
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
});
}
,如果您仍然想知道,我建议您阅读有关Mediaplay状态的信息。
PS如果Mediaplayer在玩,并且您想让它播放另一个,请拨打MediaPlayer.stop()first;
要使循环您应该检查onclicklistener,如果计数器等于songurl.length,我认为播放列表中的歌曲总数。
int counter=0;
MediaPlayer mediaPlayer=new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
btn_next.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if (counter < songurl.length) {
counter = counter + 1;
textview.setText(songurl[counter]);
try {
mediaPlayer.reset();
} catch (Exception ex) {
try {
mediaPlayer.setDataSource(songurl[counter]);
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
} else if(counter == songurl.length) {
counter = 0;
// Toast.makeText(MainActivity.this, "last song", Toast.LENGTH_SHORT).show();
textview.setText(songurl[counter]);
try {
mediaPlayer.reset();
} catch (Exception ex) {
try {
mediaPlayer.setDataSource(songurl[counter]);
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
}
}
});
在Elseif条件下,我将计数器设置为0。