2010-10-14 57 views
5

我有一些Android代碼從互聯網上流式傳輸音頻文件,並在10秒後播放流。如何使用SeekBar的OnSeekBarChangeListener查找MediaPlayer對象中的特定點?

我正在使用SeekBar查看緩衝狀態和播放狀態。我想播放從緩衝流中間開始的音頻。爲此,我將SeekBar點移到中間位置,但我無法播放中間的音頻。它會回來並從頭開始。我怎樣才能找到所需的位置,以及如何播放該特定位置的音頻?

這是我的SeekBar代碼。我怎樣才能讓這段代碼正確地使用OnSeekBarChangeListener?

seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

    @Override 
    public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { 
     // TODO Auto-generated method stub 
     if (arg2 && mediaPlayer.isPlaying()) { 
      //myProgress = oprogress; 
      arg1=mediaPlayer.getCurrentPosition(); 
      mediaPlayer.seekTo(arg1); 
     } 
    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) { 
     // TODO Auto-generated method stub 
    } 

}); 

回答

1
arg1=mediaPlayer.getCurrentPosition(); 
mediaPlayer.seekTo(arg1); 

您正在迫使玩家尋找到當前位置,而不是通過搜索欄

重新調校的當前位置刪除行:arg1=mediaPlayer.getCurrentPosition();,它應該工作。當然MediaPlayer.prepare()設置SeekBar.setMax(MediaPlayer.getDuration())後,所以尋求將是準確的。

0

我認爲你必須做一個線程...我給你下面給出的一些代碼,你可以嘗試實現。

public void run() { 
    try 
    { 
     while(song1.getDuration()!=song1.getCurrentPosition()) 
     { 
      skbar.setProgress(song1.getCurrentPosition()); 
      //bStop.setText(song1.getCurrentPosition()); 
     } 
     if (song1.getDuration()==song1.getCurrentPosition()) 
      Log.v("log","Sanket"); 
     t.suspend(); 
    } 
    catch (Exception e) 
    { 
     Log.e("log",e.toString()); 
    } 
} 
相關問題