1
我试图让它按照我想要的方式工作,它只是不会让我觉得我在某些时候已经有了它,但我正在尝试修复其他内容并更改了一些内容,搞砸了。基本上我是这个按钮是一个播放按钮。它应该通过另一个线程运行媒体播放器,以便它更快地响应和缓冲。问题是在它播放到最后,我点击播放结束并继续运行onCompletion。当我希望重新开始并从头开始玩。使用媒体播放器的线程
public void onClick(View v) {
if(playClick%2==0){
song1.setBackgroundResource(R.drawable.button_pause);
try{
if(playClick==0){
playThread();
if(lastPlayedExists){
lastPlayed.release();
}
}
mp.start();
mpExists = true;
playClick++;
lastPlayed = mp;
lastPlayedExists=true;
mp.setOnCompletionListener(new OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer media) {
mp.reset();
song1.setBackgroundResource(R.drawable.button_play);
}
});
}catch (NullPointerException e){
}
}
else if (playClick%2==1){
song1.setBackgroundResource(R.drawable.button_play);
mp.pause();
playClick++;
}
}
}
});
这是媒体播放器线程
private void playThread(){
try{
new Thread(new Runnable() {
public void run() {
try {
mp.setDataSource(song);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
mp.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}catch(IllegalStateException e){
}
}
我已经与有mp.reset onCompletion(),mp.stop()试了一下,mp.release()以及在不同的测试中尝试lastPlayed.release()。以及没有他们在那里,它只是按钮更改和进度栏重置。如果你知道如何解决这个问题并使其重播,我会非常感激它。或者如果你知道如何让线程停止并重新启动一些,以便我可以让它回忆并重新执行线程,那也可以工作(atm,当它已经被尝试时它崩溃,因为线程已经启动)。谢谢,我感谢任何意见。
那么没有人想回答,我不能回答我自己的问题,但如果有人想知道我确实弄清楚了。与playClick有关。我在onCompletion中将它设置为2。还拿出了mp.reset()。它现在运作良好。 – steven