2013-07-18 3 views
1
public class StreamingMp3Player extends Activity implements OnClickListener,   OnTouchListener, OnCompletionListener, OnBufferingUpdateListener{ 

private ImageButton buttonPlayPause; 
private SeekBar seekBarProgress; 
public EditText editTextSongURL; 

private MediaPlayer mediaPlayer; 
private int mediaFileLengthInMilliseconds; 

private final Handler handler = new Handler(); 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    initView(); 
} 

/** This method initialise all the views in project*/ 
private void initView() { 
    buttonPlayPause = (ImageButton)findViewById(R.id.ButtonTestPlayPause); 
    buttonPlayPause.setOnClickListener(this); 

    seekBarProgress = (SeekBar)findViewById(R.id.SeekBarTestPlay); 
    seekBarProgress.setMax(99); // It means 100% .0-99 
    seekBarProgress.setOnTouchListener(this); 
    editTextSongURL = (EditText)findViewById(R.id.EditTextSongURL); 
    editTextSongURL.setText(R.string.testsong_20_sec); 

    mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setOnBufferingUpdateListener(this); 
    mediaPlayer.setOnCompletionListener(this); 
} 

private void primarySeekBarProgressUpdater() { 
    seekBarProgress.setProgress((int)(((float)mediaPlayer.getCurrentPosition()/ mediaFileLengthInMilliseconds)*100)); // This math construction give a percentage of "was playing"/"song length" 
    if (mediaPlayer.isPlaying()) { 
     Runnable notification = new Runnable() { 
      public void run() { 
       primarySeekBarProgressUpdater(); 
      } 
     }; 
     handler.postDelayed(notification,1000); 
    } 
} 

@Override 
public void onClick(View v) { 
    if(v.getId() == R.id.ButtonTestPlayPause){ 
     /** ImageButton onClick event handler. Method which start/pause mediaplayer playing */ 
     try { 
      mediaPlayer.setDataSource(editTextSongURL.getText().toString()); // setup song from http://www.hrupin.com/wp-content/uploads/mp3/testsong_20_sec.mp3 URL to mediaplayer data source 
      mediaPlayer.prepare(); // you must call this method after setup the datasource in setDataSource method. After calling prepare() the instance of MediaPlayer starts load data from URL to internal buffer. 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     mediaFileLengthInMilliseconds = mediaPlayer.getDuration(); // gets the song length in milliseconds from URL 

     if(!mediaPlayer.isPlaying()){ 
      mediaPlayer.start(); 
      buttonPlayPause.setImageResource(R.drawable.button_pause); 
     }else { 
      mediaPlayer.pause(); 
      buttonPlayPause.setImageResource(R.drawable.button_play); 
     } 

     primarySeekBarProgressUpdater(); 
    } 
} 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    if(v.getId() == R.id.SeekBarTestPlay){ 
     /** Seekbar onTouch event handler. Method which seeks MediaPlayer to seekBar primary progress position*/ 
     if(mediaPlayer.isPlaying()){ 
      SeekBar sb = (SeekBar)v; 
      int playPositionInMillisecconds = (mediaFileLengthInMilliseconds/100) * sb.getProgress(); 
      mediaPlayer.seekTo(playPositionInMillisecconds); 
     } 
    } 
    return false; 
} 

@Override 
public void onCompletion(MediaPlayer mp) { 
    /** MediaPlayer onCompletion event handler. Method which calls then song playing is complete*/ 
    buttonPlayPause.setImageResource(R.drawable.button_play); 
} 

@Override 
public void onBufferingUpdate(MediaPlayer mp, int percent) { 
    /** Method which updates the SeekBar secondary progress by current song loading from URL position*/ 
    seekBarProgress.setSecondaryProgress(percent); 
} 
} 

Теперь этот код Воспроизведение mp3 Когда я нажимаю кнопку «buttonPlayPause». Но мне нужно автозапустить эту кнопку воспроизведения, когда я открываю эту активность ... это возможно?android автоматически начать onClick when open activity

Мой макет

<TextView 
    android:text="Song Titile" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/SongTitle"/> 

<TextView 
    android:layout_below="@+id/SongTitle" 
    android:text="The song URL" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/SongUrl"/> 
<ImageButton 
    android:layout_below="@+id/SongUrl" 
    android:id="@+id/ButtonTestPlayPause" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:src="@drawable/button_play"/> 


<SeekBar 
    android:layout_below="@+id/ButtonTestPlayPause" 
    android:id="@+id/SeekBarTestPlay" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:thumb="@drawable/thumb_transparent"/> 
</RelativeLayout> 

я передаю URL от другой деятельности ... мне нужно, если я открыть этот старт деятельности и воспроизведение mp3 автоматически .. не хочу нажать кнопку воспроизведения

+1

Вы можете использовать 'performClick () 'на вашем ImageButton. Вызов 'performClick()' в onCreate(). Это, по сути, будет делать то, что предложил «черный зуб». – Vikram

ответ

3

переместить логика onClick() «s внутри метода, и этот метод вызывается как из OnClick и OnCreate

private void myMethod() { 
    // logic here 
} 


@Override 
public void onClick(View v) { 
    if(v.getId() == R.id.ButtonTestPlayPause){ 
      myMethod(); 
    } 

} 



    @Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    initView(); 
    myMethod(); 
} 
+0

Работая хорошо .. спасибо – user2444649

+0

добро пожаловать – Blackbelt

3

Вы ча п также выполнить в вашем OnCreate заявлении:

Button button = findViewById(R.id.ButtonTestPlayPause); 
button.performClick(); 
0


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

и в вашем OnClick():



if(v.getId() == R.id.ButtonTestPlayPause){ 
play(); 

} 

и играть с помощью метода:



public void play(){ 
try { 
      mediaPlayer.setDataSource(editTextSongURL.getText().toString());data source 
      mediaPlayer.prepare(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
} 

+0

Да .. он работает с некоторой ошибкой ... Я пытаюсь исправить это .. thank u – user2444649

+0

ваш прием ... – pooyan

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