Android系统提供了一个专门进行Media处理的接口,该接口就是MediaPlayer。
要播放相关的音乐文件,首先我们要在res文件下创建raw文件,将相关的资源文件放在该目录下。
第一步:
初始化MediaPlayer
mPlayer = MediaPlayer.create(this, R.raw.bubian);
第二步:
try { if(mPlayer != null){ mPlayer.stop(); } mPlayer.prepare(); mPlayer.start(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }
第三步:
音乐暂停:
try { if(mPlayer != null){ mPlayer.stop(); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }
当你要启动一个SeekBar进行展示音乐播放进度的时候,进行如下处理:
seekBar.setMax(mPlayer.getDuration()); timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { // TODO Auto-generated method stub seekBar.setProgress(mPlayer.getCurrentPosition()); } }; timer.schedule(task, 0, 10);
示例代码如下:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mPlayer = MediaPlayer.create(this, R.raw.bubian); button = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); seekBar = (SeekBar) findViewById(R.id.seekbar1); button2.setOnClickListener(this); button.setOnClickListener(this); seekBar.setOnSeekBarChangeListener(this); seekBar.setMax(mPlayer.getDuration()); timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { // TODO Auto-generated method stub seekBar.setProgress(mPlayer.getCurrentPosition()); } }; timer.schedule(task, 0, 10); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode == KeyEvent.KEYCODE_BACK){ mPlayer.stop(); } return super.onKeyDown(keyCode, event); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.button1: try { if(mPlayer != null){ mPlayer.stop(); } mPlayer.prepare(); mPlayer.start(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } break; case R.id.button2: try { if(mPlayer != null){ mPlayer.stop(); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } break; default: break; } } @Override public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { // TODO Auto-generated method stub } @Override public void onStartTrackingTouch(SeekBar arg0) { // TODO Auto-generated method stub } @Override public void onStopTrackingTouch(SeekBar arg0) { // TODO Auto-generated method stub mPlayer.seekTo(seekBar.getProgress()); }
MusicPlayer播放工具类:
public class MusicPlayer { private static final String TAG = MusicPlayer.class.getSimpleName(); private Context mContext; private MediaPlayer mediaPlayer; public MusicPlayer(Context context,String path){ mContext = context; mediaPlayer = new MediaPlayer(); try { mediaPlayer.reset(); mediaPlayer.setDataSource(path); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } /** * 直接全部播放 */ public void play(){ LogUtil.info(TAG, "------play-----"); try { mediaPlayer.prepare(); mediaPlayer.start(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } /** * 停止播放 */ public void stop(){ LogUtil.info(TAG, "------stop-----"); if(mediaPlayer != null){ mediaPlayer.stop(); } } }