2011-07-24 14 views
1

元々、私はオーディオファイルを再生/一時停止/停止するMediaPlayer mPlayersを持っていました。今、私は自分のメディアにシークバーを追加しようとしています。 ()のonCreateでオーディオseekBarスレッドの問題?

:私はスレッドを使用してみました、これは私が思い付いたものです

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); 
    } 
}; 

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(); 

はその後、私は私のシークバーを更新するごとに1秒の方法run()を実装しました

ただし、私ののHTCマジックでは、オーディオは非効率的に実行されます。いくつかの言葉が繰り返されます。シークバーが少しずつ戻ってくるようです。

この問題をよく理解するために、これを言いましょう:オーディオに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