我正在开发直播电台Android应用程序...我有一个包含4个音轨的阵列,当我到达列表的末尾时,假设下一个按钮代表"最后一首歌#34;但它并没有崩溃应用程序。
这是按钮代码:
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();
}
}
});
还有一个问题......如果我想在应用程序到达最后一首歌时让它成为一个闭环,我想按下一步从头开始列表我该怎么做? 感谢。
答案 0 :(得分:3)
您只需在代码中添加模数(%)运算符
即可 counter = counter++ % songurl.length
无需添加额外的if else块
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();
}
}
});
答案 1 :(得分:0)
你遇到的一个问题就是你在检查它是否在界限内之后递增计数器,这意味着你的安全检查是无用的。将counter = counter + 1;
移到if语句的末尾。
就连续循环而言,您可以在if语句体的末尾将其更改为counter = (counter + 1) % songurl.length;
。
除了您提出的问题的范围之外,使用MediaPlayer
时存在一些问题。在catch语句中拥有如此多的关键逻辑并没有任何意义。这意味着您希望异常发生。你应该重新思考你在那里做了什么。
答案 2 :(得分:0)
你看到你在catch块中调用了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();
答案 3 :(得分:-1)
要制作循环,您应该在onclicklistener中检查if计数器是否等于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.这样它就会进入循环。