Android 简单视频播放器


//结构目录


只有一个主Activity,处理一切事情

//程序运行效果


//看看代码

  1. package sn.len.video;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import Android.app.Activity;  
  7. import android.media.AudioManager;  
  8. import android.media.MediaPlayer;  
  9. import android.os.Bundle;  
  10. import android.os.Environment;  
  11. import android.view.SurfaceHolder;  
  12. import android.view.SurfaceView;  
  13. import android.view.View;  
  14. import android.view.View.OnClickListener;  
  15. import android.widget.EditText;  
  16. import android.widget.ImageButton;  
  17.   
  18. public class VideoPlayerActivity extends Activity implements OnClickListener  
  19. {  
  20.     private EditText editText;  
  21.     private String fileName;  
  22.     private MediaPlayer mediaPlayer;  
  23.     private SurfaceView surfaceView;  
  24.     private int position;  
  25.     @Override  
  26.     public void onCreate(Bundle savedInstanceState)   
  27.     {  
  28.         super.onCreate(savedInstanceState);  
  29.         setContentView(R.layout.main);  
  30.         mediaPlayer=new MediaPlayer();  
  31.         surfaceView=(SurfaceView)findViewById(R.id.surfaceview);  
  32.         //设置surfaceView的一些初始化参数   
  33.         //得到要操作SurfaceView的对象   
  34.         SurfaceHolder surfaceHolder=surfaceView.getHolder();  
  35.         //设置屏幕像索   
  36.         surfaceHolder.setFixedSize(200200);  
  37.         //不用屏幕缓冲   
  38.         surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
  39.         //处理当电话来电时,而addCallback里面是一个接口,所以弄个类来实现它才行   
  40.         surfaceHolder.addCallback(new MyCallback());  
  41.           
  42.         editText=(EditText)findViewById(R.id.fileName);  
  43.         fileName=editText.getText().toString();  
  44.         ImageButton start=(ImageButton)findViewById(R.id.play);  
  45.         ImageButton pause=(ImageButton)findViewById(R.id.pause);  
  46.         ImageButton replay=(ImageButton)findViewById(R.id.reset);  
  47.         ImageButton stop=(ImageButton)findViewById(R.id.stop);  
  48.           
  49.         start.setOnClickListener(this);  
  50.         pause.setOnClickListener(this);  
  51.         replay.setOnClickListener(this);  
  52.         stop.setOnClickListener(this);  
  53.     }  
  54.     private class MyCallback implements SurfaceHolder.Callback  
  55.     {  
  56.         //当第二次surface创建的时候,已经拿到了上次的断点就可以接着放了。   
  57.         @Override  
  58.         public void surfaceChanged(SurfaceHolder holder, int format, int width,int height)   
  59.         {  
  60.             if(position>0 && fileName!=null)  
  61.             {  
  62.                 try   
  63.                 {  
  64.                     play();  
  65.                     mediaPlayer.seekTo(position);  
  66.                     position=0;  
  67.                       
  68.                 }   
  69.                 catch (IOException e)   
  70.                 {  
  71.                     e.printStackTrace();  
  72.                 }  
  73.                   
  74.             }  
  75.         }  
  76.         @Override  
  77.         public void surfaceCreated(SurfaceHolder holder)   
  78.         {  
  79.               
  80.         }  
  81.         //当电话来的时候,也就是surface要消毁的时候,记录视频的位置   
  82.         @Override  
  83.         public void surfaceDestroyed(SurfaceHolder holder)   
  84.         {  
  85.             position=mediaPlayer.getCurrentPosition();  
  86.             mediaPlayer.stop();  
  87.         }  
  88.     }  
  89.     @Override  
  90.     public void onClick(View v)   
  91.     {  
  92.         //可以判断下SD卡是否存在   
  93.         //Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)   
  94.         try {  
  95.             switch (v.getId())  
  96.             {  
  97.                 case R.id.play:  
  98.                 {  
  99.                     play();  
  100.                       
  101.                 }break;  
  102.                 case R.id.pause:  
  103.                 {  
  104.                     if(mediaPlayer.isPlaying())  
  105.                     {  
  106.                         mediaPlayer.pause();  
  107.                     }  
  108.                     else  
  109.                     {  
  110.                         mediaPlayer.start();  
  111.                     }  
  112.                 }break;  
  113.                 case R.id.reset:  
  114.                 {  
  115.                     if(mediaPlayer.isPlaying())  
  116.                     {  
  117.                         mediaPlayer.seekTo(0);  
  118.                     }  
  119.                     else  
  120.                     {  
  121.                         play();  
  122.                     }  
  123.                 }break;  
  124.                 case R.id.stop:  
  125.                 {  
  126.                     if(mediaPlayer.isPlaying())  
  127.                     {  
  128.                         mediaPlayer.stop();  
  129.                     }  
  130.                 }break;  
  131.                 default:break;  
  132.             }  
  133.         } catch (IOException e)   
  134.         {  
  135.               
  136.             e.printStackTrace();  
  137.         }  
  138.     }  
  139.   
  140.     private void play() throws IOException   
  141.     {  
  142.         File videoFile=new File(Environment.getExternalStorageDirectory(),fileName);  
  143.         mediaPlayer.reset();  
  144.         //设置影片类型   
  145.         mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);  
  146.         //让surfaceView来播放   
  147.         mediaPlayer.setDisplay(surfaceView.getHolder());  
  148.         //设置路径   
  149.         mediaPlayer.setDataSource(videoFile.getAbsolutePath());  
  150.         mediaPlayer.prepare();//缓冲   
  151.         mediaPlayer.start();//播放   
  152.     }  
  153. }  

相关内容