重新学了Android,写了一个mediaplayer播放的程序实现音乐的播放和视频的播放,程序效果图如图:
完成的基本功能有:1,读取音乐文件 2.播放音乐文件 3,读取视频文件4,播放视频文件
主要程序源代码:
package com.huangcheng.media; import java.io.IOException; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.Toast; public class MediaDemoActivity extends Activity { //控制音乐 private SeekBar seekbar_music; private Button start_music_btn; private Button stop_music_btn; //控制视频 private SeekBar seekbar_video; private Button start_video_btn; private Button stop_video_btn; private SurfaceView surfaceview_video; private SurfaceHolder surfaceview_holder; //播放器 private MediaPlayer media=null; private MediaPlayer media_video=null; private Timer timer; private TimerTask timertask_music; private TimerTask timertask_video; //互斥量,seekbar拖动和Timer private volatile boolean ischanging=false; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //控制media media=new MediaPlayer(); media_video=new MediaPlayer(); media.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer arg0) { // TODO Auto-generated method stub Toast.makeText(MediaDemoActivity.this, "播放结束", Toast.LENGTH_SHORT).show(); media.release(); } }); media_video.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer arg0) { // TODO Auto-generated method stub Toast.makeText(MediaDemoActivity.this, "播放结束", Toast.LENGTH_SHORT).show(); media_video.release(); } }); //Timer记录播放时刻 timer=new Timer(); timertask_music=new TimerTask() { @Override public void run() { // TODO Auto-generated method stub //正在拖动seekbar,停止Timer if(ischanging==true){ return; } else{ seekbar_music.setProgress(media.getCurrentPosition()); } } }; timertask_video=new TimerTask() { @Override public void run() { // TODO Auto-generated method stub //正在拖动seekbar,停止Timer if(ischanging==true){ return; } else{ seekbar_video.setProgress(media_video.getCurrentPosition()); } } }; timer.schedule(timertask_music, 0, 10);//开始记录,每10ms记录一次 timer.schedule(timertask_video, 0, 10);//开始记录,每10ms记录一次 //更新控件 seekbar_music=(SeekBar)findViewById(R.id.seekbar_music); seekbar_video=(SeekBar)findViewById(R.id.seekbar_video); start_music_btn=(Button)findViewById(R.id.start_music_btn); stop_music_btn=(Button)findViewById(R.id.stop_music_btn); start_video_btn=(Button)findViewById(R.id.start_video_btn); stop_video_btn=(Button)findViewById(R.id.stop_video_btn); surfaceview_video=(SurfaceView)findViewById(R.id.surfaceview_video); surfaceview_holder=surfaceview_video.getHolder(); surfaceview_holder.setFixedSize(100, 100); surfaceview_holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); seekbar_music.setEnabled(false); seekbar_video.setEnabled(false); // 添加处理seekbar事件 seekbar_music.setOnSeekBarChangeListener(new SeekbarmusicEvent()); seekbar_video.setOnSeekBarChangeListener(new SeekbarvideoEvent()); //添加music按键处理 start_music_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub media.reset(); media=MediaPlayer.create(MediaDemoActivity.this, R.raw.m); seekbar_music.setMax(media.getDuration()); try { media.prepare(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } media.start(); seekbar_music.setEnabled(true); } }); stop_music_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub media.stop(); seekbar_music.setEnabled(false); } }); start_video_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub media_video.reset(); media_video=MediaPlayer.create(MediaDemoActivity.this, R.raw.v); seekbar_video.setMax(media_video.getDuration()); media_video.setAudioStreamType(AudioManager.STREAM_MUSIC); media_video.setDisplay(surfaceview_holder); try { media_video.prepare(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } media_video.start(); seekbar_video.setEnabled(true); } }); stop_video_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub media_video.stop(); seekbar_video.setEnabled(false); } }); } //处理拖动seekbarmusic事件 class SeekbarmusicEvent implements SeekBar.OnSeekBarChangeListener{ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub ischanging=true;//停止timer } @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub media.seekTo(seekBar.getProgress()); ischanging=false;//开启timer } } class SeekbarvideoEvent implements SeekBar.OnSeekBarChangeListener{ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub ischanging=true;//停止timer } @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub media_video.seekTo(seekBar.getProgress()); ischanging=false;//开启timer } } }