我手机中有listview
个所有音乐。每当用户点击listview
的项目时,它每次都会启动我的播放器类的相同活动。用户选择的第一首音乐效果很好。但问题是当用户选择第二个音乐时,它会开始播放新音乐而不会停止前一个音乐。结果就是两部音乐在一起演奏。
这是我的listview
onItemClickListener()
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView tv = (TextView) view;
String songId = tv.getText().toString();
Intent i = new Intent(getActivity(), player.class);
i.putExtra("id", songId);
startActivity(i);
}
});
和我的玩家类的主要部分:
private MediaPlayer mp;
Bundle extras = getIntent().getExtras();
String songId = null;
if(extras != null){
songId = extras.getString("id");
play.setBackgroundResource(R.drawable.pause);
}
find(songId);
private void find(String songName) {
for(int t = 0; t < songs.size(); t++){
if(("" + songs.get(t)).endsWith(songName)){ //songs, an ArrayList of music files path
Uri myUri = Uri.parse("" + songs.get(t));
stopPlaying();
mp = MediaPlayer.create(this, myUri);
mp.start();
break;
}
}
}
private void stopPlaying() {
if (mp != null) {
mp.stop();
mp.release();
mp = null;
}
}
我尝试了几种方法来摆脱这个问题。但我不明白我错过了什么。如果需要,我可以提供完整的代码。
答案 0 :(得分:0)
由于你已经调用了stopPlaying方法,理想情况下它应该停止。尝试添加此行代码
在mp.setLooping(false);
之前 mp.start();
不确定这是否可以解决问题。
也试试这个
if(mp!=null && mp.isPlaying())
而不是
if (mp != null)
答案 1 :(得分:0)
除了之前的回答
将您的媒体播放器定义为静态
static MediaPlayer mp;