2011-07-24 90 views
1

最初,我有一個MediaPlayer mPlayers播放/暫停/停止我的音頻文件。現在,我正在爲我的媒體添加一個搜索欄。我嘗試使用線程,這就是我想出了:音頻seekBar線程問題?

在的onCreate():

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, 
       boolean fromUser) { 
      // TODO Auto-generated method stub 
      mPlayer.seekTo(progress); 
     } 

////........Omitted Code..........\\\\ 

//At the very end of the method: 
seekThread = new Thread(this); //My Activity implements:Runnable 
seekThread.start(); 

然後,我實現了一個方法run()更新我的搜索欄每1秒:

public void run() { 
    try { 
     while(mPlayer != null){ 
      int currentPosition = mPlayer.getCurrentPosition(); 
      Message msg = new Message(); 
      msg.what = currentPosition; 
      threadHandler.sendMessage(msg); 
      Thread.sleep(1000); 
     } 

    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 
private Handler threadHandler = new Handler(){ 
    public void handleMessage(Message msg){ 
     seekBar.setProgress(msg.what); 
    } 
}; 

但是,在我的HTC Magic,音頻運行效率低下。有些詞重複。似乎每個搜索欄都會稍微回退一點。

爲了讓你更好地理解問題,讓我們這樣說:如果音頻說:abcdefghijklmn,那麼它會是這樣的:abccdeffghijjklmnn。

您對我的線索有何改進建議?我做對了嗎?

回答

3

不知道這會幫助,但嘗試:

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
    @Override 
    public void onProgressChanged(SeekBar seekBar, int progress, 
      boolean fromUser) { 
     if (fromUser) { 
      mPlayer.seekTo(progress); 
     } 
    } 

如果沒有這個條件,mPlayer.seekTo(進度);每次調用seekBar.setProgress(msg.what)時調用;

+0

謝謝。看起來'fromUser'變量需要檢查。現在效果很好。 – iTurki