2011-09-07 107 views
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,當它已經被嘗試時它崩潰,因爲線程已經啓動)。謝謝,我感謝任何意見。

+0

那麼沒有人想回答,我不能回答我自己的問題,但如果有人想知道我確實弄清楚了。與playClick有關。我在onCompletion中將它設置爲2。還拿出了mp.reset()。它現在運作良好。 – steven

回答

1
mp.setOnCompletionListener(new OnCompletionListener(){ 

         @Override 
         public void onCompletion(MediaPlayer media) { 
          playClick=2; 
          song1.setBackgroundResource(R.drawable.button_play); 

         } 

        });