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