【发布时间】:2011-11-12 08:38:06
【问题描述】:
我试图让它以我想要的方式工作,但我认为我在某些时候无法做到,但我试图修复其他东西并更改了一些东西并将其搞砸了。基本上我这个按钮是一个播放按钮。它应该通过另一个线程运行媒体播放器,以便它更快地做出反应和缓冲。问题是在它播放到最后并且我单击播放它结束并继续运行 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()、mp.stop() 和 mp.release() 的 onCompletion 以及在不同的测试中尝试 lastPlayed.release()。以及它们都不在那里,只是按钮更改和进度条重置。如果您知道如何解决此问题并使其重播,我将不胜感激。或者,如果您知道如何使线程停止并重新启动一些方法,以便我可以让它回忆并再次执行线程,这也可以工作(atm 尝试过它会崩溃,因为线程已经启动)。谢谢,我感谢任何意见。
【问题讨论】:
-
好吧,没有人想回答,我还不能回答我自己的问题,但如果有人想知道我确实想通了。与playClick有关。我在 onCompletion 中将其设置为 2。还取出了 mp.reset()。现在效果很好。
标签: android multithreading media-player