2013-07-01 149 views
0

当我的mediaplayer开始播放时,我想要了解从播放器开始到播放媒体结束的时间。例如00:01,00:02,00:03,00:04 ...我该如何做到这一点?以下是我的mediaplayer类。获取时间流逝的MP3文件流的时间和持续时间android

public class EntityPageActivity extends Activity implements Runnable, OnClickListener, OnSeekBarChangeListener{ 
    private SeekBar seekBar; 
    private Button startMedia; 
    private Button pauseMedia; 
    private MediaPlayer mp; 
    Uri url; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sample); 

     AudioControl();  
    } 

    public void AudioControl(){ 

     seekBar = (SeekBar) findViewById(R.id.seekBar); 
     startMedia = (Button) findViewById(R.id.play); 
     pauseMedia = (Button) findViewById(R.id.pause); 
     startMedia.setOnClickListener(this); 
     pauseMedia.setOnClickListener(this); 

     seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

      @Override 
      public void onStopTrackingTouch(SeekBar arg0) { 
      // TODO Auto-generated method stub 
       //System.out.println("maxvolume"+Integer.toString(maxVolume)); 
      } 

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

      @Override 
      public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { 
      // TODO Auto-generated method stub 
        mp.seekTo(arg1); 
        seekBar.setProgress(arg1); 

      } 

     }); 






    } 

    public void run() { 
     int currentPosition= 0; 
     int total = mp.getDuration(); 
     while (mp!=null && currentPosition<total) { 
      try { 
       Thread.sleep(1000); 
       currentPosition= mp.getCurrentPosition(); 
      } catch (InterruptedException e) { 
       return; 
      } catch (Exception e) { 
       return; 
      }    
      seekBar.setProgress(currentPosition); 
     } 
    } 

    public void onClick(View v) { 
     if (v.equals(startMedia)) { 
      if (mp != null && mp.isPlaying()) return; 
      if(seekBar.getProgress() > 0) { 
       mp.start(); 
       return; 
      } 

      mp = MediaPlayer.create(EntityPageActivity.this,Uri.parse("http://cdn-preview-e.deezer.com/stream/ed403858b3532e9c07c99d7015269848-2.mp3")); 

      mp.start();      
      seekBar.setProgress(0); 
      seekBar.setMax(mp.getDuration()); 

      new Thread(this).start(); 

     } 

     if (v.equals(pauseMedia) && mp!=null) { 
      mp.pause(); 
     }  

    } 

    @Override 
    public void onProgressChanged(SeekBar seekBar, int progress, 
      boolean fromUser) { 
     // TODO Auto-generated method stub 

    } 

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

    } 

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

    } 

} 

回答

2

下面是这两种方法之一是让媒体播放器的当前位置和第二是获得总持续时间

// returns current position 
mediaPlayer.getCurrentPosition(); 

//returns total duration 
mediaPlayer.getDuration(); 

希望这将有助于

+0

是的,但我怎样才能获得视频播放时间流逝 – Dimitri

+0

total - current – farrukh

+0

get currentPosition正在返回已经过的时间 – farrukh

1

当您启动媒体播放器实现一个可运行:

mp.start(); 
Handler handler = new Handler(); 
Runnable runnable = new Runnable() { 
         public void run() { 
          while (mp.isPlaying()) { 
           try { 
            Thread.sleep(1000); 
           } catch (InterruptedException e) { 
            e.printStackTrace(); 
           } 
           handler.post(new Runnable() { 
            public void run() { 
             seekbar.setMax(mp.getDuration()/1000); 
             currTime.setText(getDurationString(mp 
               .getCurrentPosition()/1000)); 
             seekbar.setProgress(mp 
               .getCurrentPosition()/1000); 
            } 
           }); 
          } 
         } 
        }; 
        new Thread(runnable).start();