2015-04-08 5 views
1

Этот код для чтения mp3 из сырой папки, но я хочу изменить свой mp3-файл в другой файл с сд картыSeekBar для mp3 с сд карты

свой новый код, музыка играет, но SeekBar не работает должным образом, когда я точ он SeekBar вернуться к Фрист позиции

public class MainActivity extends Activity implements OnClickListener { 

SeekBar seek_bar; 
Button play_button, pause_button; 
MediaPlayer mediaPlayer; 
TextView text_shown; 
Handler seekHandler = new Handler(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    getInit(); 
    seekUpdation(); 
} 


public void getInit() { 
    seek_bar = (SeekBar) findViewById(R.id.seek_bar); 
    play_button = (Button) findViewById(R.id.play_button); 
    pause_button = (Button) findViewById(R.id.pause_button); 
    text_shown = (TextView) findViewById(R.id.text_shown); 
    play_button.setOnClickListener(this); 
    pause_button.setOnClickListener(this); 
    String filePath = Environment.getExternalStorageDirectory() + "/Android/music.mp3"; 
    mediaPlayer = new MediaPlayer(); 
    try { 
     mediaPlayer.setDataSource(filePath); 
    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SecurityException 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(); 
    } 
    mediaPlayer.setOnPreparedListener(new OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mediaPlayer) { 

     } 
    }); 
    mediaPlayer.prepareAsync(); 
    seek_bar.setMax(mediaPlayer.getDuration()); 
} 

Runnable run = new Runnable() { 

    @Override 
    public void run() { 
     seekUpdation(); 
    } 
}; 

public void seekUpdation() { 

    seek_bar.setProgress(mediaPlayer.getCurrentPosition()); 
    seekHandler.postDelayed(run, 1000); 
    seek_bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

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

     } 

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

     } 

     @Override 
     public void onProgressChanged(SeekBar seek_bar, int progress, boolean fromUser) { 
      if(fromUser){ 
       mediaPlayer.seekTo(progress); 
       seek_bar.setProgress(progress); 
      } 

     } 
    }); 
} 

@Override 
public void onClick(View view) { 
    switch (view.getId()) { 
    case R.id.play_button: 
     text_shown.setText("Playing..."); 
     mediaPlayer.start(); 
     break; 
    case R.id.pause_button: 
     mediaPlayer.pause(); 
     text_shown.setText("Paused..."); 
    } 
} 

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    if(fromUser){ 
     mediaPlayer.seekTo(progress); 
     seekBar.setProgress(progress); 
    } 
} 


@Override 
public void onBackPressed() { 
    mediaPlayer.stop(); 
    finish(); 
} 

}

ответ

0

Просто переместите эту линию

seek_bar.setMax(mediaPlayer.getDuration()); 

к seekUpdation() после

seekHandler.postDelayed(run, 1000); 
0

Заменить

mediaPlayer = MediaPlayer.create(this, R.raw.my_file); 

с:

String filePath = Environment.getExternalStorageDirectory() + "/randomDirectory/yourFile.mp3"; 
mediaPlayer = new MediaPlayer(); 
mediaPlayer.setDataSource(filePath); 
mediaPlayer.setOnPreparedListener(new OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer mp) { 
     mediaPlayer.start(); 
    } 
}); 
mediaPlayer.prepareAsync(); 
+0

** Mr. Daniel Zolnai, я получаю эту ошибку по вашему ответу ** '04-08 22: 30: 10.260: E/MediaPlayer (17087): начало вызова в состоянии 0 04-08 22: 30: 10.260: E/MediaPlayer (17087): Ошибка (-38, 0) 4-08 22: 30: 10.340: E/MediaPlayer (17087): Ошибка (-38,0) ' –

+0

Это потому, что вы пытались запустить MediaPlayer, прежде чем он сможет загрузить источник данных. См. Мое редактирование в моем ответе, как его решить. –

+0

** спасибо человеку, я меняю свой код на новые, которые входят в мой вопрос, см. Мое редактирование в нем, но поиск не работает должным образом. когда я его вытаскиваю, поиск бара возвращается в frist и музыку от frist ** –

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