2011-07-08 4 views
1

現在、mp3をストリーミングしているメディアプレーヤーがあります。私はシークバーを持っています、それは働いていません。私は実際の生ファイルで試してみましたが、それはうまくいくようです。私はシークバーが歌の持続時間を得ていないと思う。何か案は?ストリーミングオーディオのAndroidシークバー

コード:

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

dropboxからではなくローカルでファイルを読み込もうとしましたか? –

+0

Localさんはどういう意味ですか? – 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