2011-07-08 92 views
1

我目前有一個媒體播放器,正在流媒體的MP3。我有一個seekbar,但是,它不工作。我用一個實際的原始文件嘗試過,似乎工作。我認爲seekbar沒有得到歌曲的持續時間。有任何想法嗎?安卓seekbar與流音頻

代碼:

public class SeekMe extends Activity implements Runnable{ 
    /** Called when the activity is first created. */ 
    MediaPlayer mp; 
    Button playButton; 
    Button stopButton; 
    SeekBar seekMe; 
    int total; 

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

    playButton = (Button)findViewById(R.id.play); 
    stopButton = (Button)findViewById(R.id.stop); 
    seekMe = (SeekBar)findViewById(R.id.seekBar1); 

    final MediaPlayer mp = new MediaPlayer(); 

    try { 
     mp.setDataSource("http://dl.dropbox.com/u/24535120/Week%20of%20May%201/Swanky%20Tunes%20%26%20Hard%20Rock%20Sofa%20-%20Smolengrad%20%28Original%20Mix%29.mp3"); 
     mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mp.prepareAsync(); 
    } 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(); 
    } 

    mp.setOnPreparedListener(new OnPreparedListener(){ 

     @Override 
     public void onPrepared(MediaPlayer arg0) { 
      // TODO Auto-generated method stub 
      total = mp.getDuration(); 
     } 

    }); 

    seekMe.setProgress(0); 


    playButton.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View arg0) { 
      mp.start(); 
      seekMe.setMax(total); 

     } 

    }); 

    stopButton.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View arg0){ 
      mp.pause(); 
     } 
    }); 

    seekMe.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

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

     } 

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

     } 

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

      if(fromUser){ 
       mp.seekTo(progress); 
       seekMe.setProgress(progress); 
      } 

     } 
    }); 

    Thread currentThread = new Thread(this); 
    currentThread.start(); 


} 

@Override 
public void run() { 
    // TODO Auto-generated method stub 

    try{ 
     while(mp != null){ 
      int currentPosition = mp.getCurrentPosition(); 
      Message msg = new Message(); 
      msg.what = currentPosition; 
      threadHandler.sendMessage(msg); 
     } 
     Thread.sleep(100); 
    }catch (InterruptedException e){ 
     e.printStackTrace(); 
    } 
} 

private Handler threadHandler = new Handler(){ 
    public void handleMessage(Message msg){ 
     seekMe.setProgress(msg.what); 
    } 
}; 

}

+0

您是否試過在本地讀取文件,而不是從保存箱中讀取文件。 –

+0

你是什麼意思的本地? – Splitusa

+0

由本地我的意思是從手機上的文件系統。 –

回答

2

您是否嘗試過調用默認的音樂播放器對MP3文件的URL?

Intent i = new Intent(Intent.ACTION_VIEW); 
i.setDataAndType(Uri.parse(url), "audio/*"); 
context.startActivity(i); 
+1

還沒有。但這是一個好主意。我應該在哪裏添加代碼?謝謝! – Splitusa

+0

只需在要打開Android媒體播放器的位置添加代碼,或者在該示例中將其添加到onCreate的開頭。 – NoBugs

+0

好的。我會試試這個,讓你知道結果。 – Splitusa