2013-06-30 18 views
0

和標題一樣。我不知道該怎麼做。我知道我可以使用如何通過音頻的當前持續時間異步更改SeekBar的進度Android?

mSeekBar.setProgress(mMediaPlayer.getCurrentDuration()); 

但我不知道如何實現一些偵聽器來監聽當前的持續時間更改。我使用MediaPlayer,該類提供了很多聽衆,但沒有。

+0

不幸的是,gomino的答案確實是最好的解決方案。儘管它似乎是必需的 - 在媒體播放器中沒有用於註冊進行更改的API。悲傷但真實。你應該接受@gomino解決方案 –

+0

「悲傷但真實」 - 準確總結:d – user2511941

回答

0

有人已經回答了類似的問題here

主要的想法是使用一個處理程序,如果恰當的遞歸調用自身。 而here是一篇博客文章,可能會幫助你做到這一點。

+0

哦,謝謝。我正在尋找這個解決方案。 – user2511941

0

在我的應用程序中,我控制服務內的音樂播放。爲了在音樂播放過程中更新我的搜索欄的進度,我創建了一個工作線程,只要MediaPlayer不爲null,並且它的當前位置少於總持續時間,就會向服務索取歌曲的當前進度。然後,我每隔一秒更新一次seekbar的進度,並使用Handler更新旁邊的文本。

public void updateSeekBar() { 

    // Worker thread that will update the seekbar as each song is playing 
    Thread t = new Thread() { 
     Handler handler = new Handler(); 

     @Override 
     public void run() { 

      // Log.d(TAG, "Updating Seekbar....."); 
      int currentPosition = 0; 
      int total = (int) PlayerService.getInstance().getDuration(); 
      seekBar.setMax(total); 
      while (PlayerService.getInstance().mp != null 
        && PlayerService.getInstance().mp.getCurrentPosition() < total) { 
       try { 

        Thread.sleep(1000); 
        currentPosition = PlayerService.getInstance().mp 
          .getCurrentPosition(); 
       } catch (InterruptedException e) { 
        return; 
       } catch (Exception e) { 
        return; 
       } 

       seekBar.setProgress(PlayerService.getInstance().mp 
         .getCurrentPosition()); 

       handler.post(new Runnable() { 

        @Override 
        public void run() { 
         setTimeLeft(); 
         setTime(); 

        } 
       }); 

      } 

     } 

    }; 
    t.start(); 

} 
相關問題