2012-01-20 3 views
3

Я играю песню с SD-карты.синхронизирующий поиск со звуковой композицией

Его играет хорошо. Я попытался реализовать поисковую панель таким образом, что, когда пользователь перемещает поисковый бард, песня пересылается или перерисовывается в соответствии с позицией поиска.

Вот код

public class ViewAudio extends Activity implements OnSeekBarChangeListener,OnSeekCompleteListener,OnCompletionListener,OnPreparedListener{ 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.audio_player); 

     System.gc(); 
     Intent i = getIntent(); 
     Bundle extras = i.getExtras(); 
     filename = extras.getString("audiofilename"); 

     try { 
      mPlayer.setDataSource(filename); 
     } 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 { 
      mPlayer.prepare(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     mPlayer.setOnCompletionListener(this); 
     mPlayer.setOnPreparedListener(this); 
     mPlayer.setOnSeekCompleteListener((OnSeekCompleteListener) this); 

     mPlayer.start(); 

     TextView tv=(TextView) findViewById(R.id.file); 
     tv.setText("Playing "+filename); 

     seekbar = (SeekBar)findViewById(R.id.seekBar1); 
     mPlay = (Button)findViewById(R.id.play); 
     mPause = (Button)findViewById(R.id.pause); 

     seekbar.setProgress(0); 
     seekbar.setOnSeekBarChangeListener(this); 
     total = mPlayer.getDuration(); 

    } 
@Override 
public void onProgressChanged(SeekBar seekBar, int progress, 
     boolean fromUser) { 
    Log.d("Progres changed",""+progress); 

    if(fromUser){ 
     mPlayer.seekTo(progress); 
     seekbar.setProgress(progress); 

    } 

} 

} 

Теперь, где бы я нажимаю SeekBar песня становится воспроизведен с начала не с позиции я нажал. И он не движется на основе песни.

Любой, пожалуйста, помогите.

ответ

3

Я решил. Создайте поток, который будет проверять позицию песни каждую секунду, и переместите стрелку на основании позиции композиции

mediaPos = mplayer.getCurrentPosition(); 
    mediaMax = mplayer.getDuration(); 

    seekbar.setMax(mediaMax); // Set the Maximum range of the 
    seekbar.setProgress(mediaPos);// set current progress to song's 

    handler.removeCallbacks(moveSeekBarThread); 
    handler.postDelayed(moveSeekBarThread, 100); //cal the thread after 100 milliseconds 


} 
    /** 
* The Move seek bar. Thread to move seekbar based on the current position 
* of the song 
*/ 
private Runnable moveSeekBarThread = new Runnable() { 
    public void run() { 
      if(mplayer.isPlaying()){ 

      int mediaPos_new = mPlayer.getCurrentPosition(); 
      int mediaMax_new = mPlayer.getDuration(); 
      seekbar.setMax(mediaMax_new); 
      seekbar.setProgress(mediaPos_new); 

      handler.postDelayed(this, 100); //Looping the thread after 0.1 second 
    } 

    } 
}; 
Смежные вопросы