1. package com.google.activity.video;   
  2.   
  3. import java.io.IOException;   
  4.   
  5. import android.graphics.PixelFormat;   
  6. import android.media.AudioManager;   
  7. import android.media.MediaPlayer;   
  8. import android.media.MediaPlayer.OnCompletionListener;   
  9. import android.media.MediaPlayer.OnErrorListener;   
  10. import android.os.Bundle;   
  11. import android.util.Log;   
  12. import android.view.SurfaceHolder;   
  13. import android.view.SurfaceView;   
  14. import android.view.View;   
  15. import android.view.View.OnClickListener;   
  16. import android.widget.ImageButton;   
  17. import android.widget.TextView;   
  18.   
  19. import com.google.Main;   
  20. import com.google.R;   
  21. import com.google.util.MemoryStatusUtil;   
  22. import com.google.util.ToastUtil;   
  23.   
  24.   
  25. public class Index2Activity extends Main implements SurfaceHolder.Callback {   
  26.     /** 日志TAG */  
  27.     private static final String TAG = "**********Index2Activity.java*********";   
  28.   
  29.     /** 播放、暂停、重置、停止等按钮 */  
  30.     private ImageButton mBt_play,mBt_pause ,mBt_reset ,mBt_stop;   
  31.     /** 显示视屏 */  
  32.     private SurfaceView mSurfaceView;   
  33.     /** 显示控制信息 */  
  34.     private TextView mTextView;   
  35.     /** 用surfaceHolder来控制surfaceview */  
  36.     private SurfaceHolder mSurfaceHolder;   
  37.     /** 创建媒体 */  
  38.     private MediaPlayer mMediaPlayer;   
  39.        
  40.     /** 视频文件路径 */  
  41.     private static final String strVideoPath = "/sdcard/cctv2.3gp";   
  42.     /** mediaplayer是否暂停 */  
  43.     private boolean mIsPaused = false;   
  44.     /** 媒体文件是否释放 */  
  45.     private boolean mIsReleased = false;   
  46.        
  47.        
  48.        
  49.     @Override  
  50.     public void onCreate(Bundle savedInstanceState) {   
  51.         // TODO Auto-generated method stub   
  52.         super.onCreate(savedInstanceState);   
  53.            
  54.         setContentView(R.layout.video2);   
  55.         //不存在内存卡提示   
  56.         checkExternalMemory();   
  57.            
  58.         setUI();   
  59.            
  60.            
  61.     }   
  62.        
  63.     //检测内存卡   
  64.     private void checkExternalMemory(){   
  65.         if(!MemoryStatusUtil.externalMemoryAvailable())   
  66.         {   
  67.             ToastUtil.makTextToast(this, R.string.str_err_nosd, true);   
  68.             return ;   
  69.         }   
  70.     }   
  71.        
  72.     /** 获取控件 */  
  73.     private void setUI(){   
  74.         //设置系统的PixelFormat为 UNKNOWN   
  75.         getWindow().setFormat(PixelFormat.UNKNOWN);   
  76.            
  77.         mTextView = (TextView) findViewById(R.id.video_title2);   
  78.         mBt_pause = (ImageButton) findViewById(R.id.video_pause);   
  79.         mBt_play = (ImageButton) findViewById(R.id.video_play);   
  80.         mBt_reset = (ImageButton) findViewById(R.id.video_reset);   
  81.         mBt_stop = (ImageButton) findViewById(R.id.video_stop);   
  82.            
  83.         mSurfaceView = (SurfaceView) findViewById(R.id.mSurfaceView);   
  84.            
  85.         mSurfaceHolder = mSurfaceView.getHolder();   
  86.         mSurfaceHolder.addCallback(this);   
  87.            
  88.         mSurfaceHolder.setFixedSize(176144);//设置影片大小   
  89.         mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);   
  90.            
  91.         setListener();   
  92.            
  93.     }   
  94.        
  95.     /** 设置按钮的监听器 */  
  96.     private void setListener(){   
  97.         mBt_pause.setOnClickListener(listener);   
  98.         mBt_play.setOnClickListener(listener);   
  99.         mBt_reset.setOnClickListener(listener);   
  100.         mBt_stop.setOnClickListener(listener);   
  101.     }   
  102.        
  103.     /** 按钮监听事件 */  
  104.     private OnClickListener listener = new OnClickListener() {   
  105.            
  106.         @Override  
  107.         public void onClick(View v) {   
  108.             // TODO Auto-generated method stub   
  109.             switch (v.getId())    
  110.             {   
  111.             //播放按钮   
  112.             case R.id.video_play:   
  113.                 playVideo(strVideoPath);   
  114.                 break;   
  115.                    
  116.                 //暂停按钮   
  117.             case R.id.video_pause:   
  118.                 if(mMediaPlayer != null)   
  119.                 {   
  120.                     if(mIsReleased == false)   
  121.                     {   
  122.                         if(mIsPaused == false)//前一个状态未暂停,则暂停   
  123.                         {   
  124.                             mMediaPlayer.pause();   
  125.                             mIsPaused = true;   
  126.                             mTextView.setText(R.string.video_pause);   
  127.                         }   
  128.                         else //前一个状态已暂停,则开启   
  129.                         {   
  130.                             mMediaPlayer.start();   
  131.                             mIsPaused = false;   
  132.                             mTextView.setText(R.string.video_play);   
  133.                         }   
  134.                     }   
  135.                 }   
  136.                    
  137.                    
  138.                 break;   
  139.                    
  140.                 //重置按钮   
  141.             case R.id.video_reset:   
  142.                 if(mIsReleased == false)   
  143.                 {   
  144.                     if(mMediaPlayer != null)   
  145.                     {   
  146.                         mMediaPlayer.seekTo(0);//重新播放   
  147.                     }   
  148.                 }   
  149.                 break;   
  150.                    
  151.                 //停止按钮   
  152.             case R.id.video_stop:   
  153.                 if(mMediaPlayer != null)   
  154.                 {   
  155.                     if(mIsReleased == false)   
  156.                     {   
  157.                         mMediaPlayer.stop();   
  158.                         mMediaPlayer.release();   
  159.                         mMediaPlayer = null;   
  160.                         mIsReleased = true ;   
  161.                         mTextView.setText(R.string.video_stop);   
  162.                     }   
  163.                 }   
  164.                 break;   
  165.                    
  166.             default:   
  167.                 break;   
  168.             }   
  169.                
  170.         }   
  171.     };   
  172.        
  173.     /**  
  174.      * 播放视屏函数  
  175.      * @param filename 视屏文件路径  
  176.      */  
  177.     private void playVideo(final String filename){   
  178.         if(mMediaPlayer != null){   
  179.             mMediaPlayer.stop();   
  180.         }   
  181.            
  182.         mMediaPlayer = new MediaPlayer();   
  183.            
  184.            
  185.            
  186.         mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);   
  187.         //设置影片以surfaceview的形式播放   
  188.         mMediaPlayer.setDisplay(mSurfaceHolder);   
  189.            
  190.         try {   
  191.                
  192.                
  193.             mMediaPlayer.setDataSource(filename);   
  194.             mMediaPlayer.prepare();   
  195.                
  196.                
  197.                
  198.             mMediaPlayer.start();   
  199.                
  200.         } catch (IllegalArgumentException e) {   
  201.             // TODO Auto-generated catch block   
  202.             e.printStackTrace();   
  203.         } catch (IllegalStateException e) {   
  204.             // TODO Auto-generated catch block   
  205.             e.printStackTrace();   
  206.         } catch (IOException e) {   
  207.             // TODO Auto-generated catch block   
  208.             e.printStackTrace();   
  209.         }   
  210.            
  211.         //设置一些标志信息    
  212.         mIsReleased = false;   
  213.         mTextView.setText(R.string.video_play);   
  214.            
  215.         mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {   
  216.                
  217.             @Override  
  218.             public void onCompletion(MediaPlayer mp) {   
  219.                 // TODO Auto-generated method stub   
  220.                 try {   
  221.                     mMediaPlayer.release();   
  222.                        
  223.                 } catch (Exception e) {   
  224.                     // TODO Auto-generated catch block   
  225.                     e.printStackTrace();   
  226.                 }   
  227.                 mTextView.setText(R.string.video_stop);   
  228.             }   
  229.         });   
  230.            
  231.         mMediaPlayer.setOnErrorListener(new OnErrorListener() {   
  232.                
  233.             @Override  
  234.             public boolean onError(MediaPlayer mp, int what, int extra) {   
  235.                 // TODO Auto-generated method stub   
  236.                 try {   
  237.                     mMediaPlayer.release();   
  238.                 } catch (Exception e) {   
  239.                     // TODO Auto-generated catch block   
  240.                     e.printStackTrace();   
  241.                 }   
  242.                 mTextView.setText(R.string.str_OnErrorListener);   
  243.                    
  244.                 return false;   
  245.             }   
  246.         });   
  247.            
  248.            
  249.     }   
  250.   
  251.        
  252.     /** 以下是实现surfaceHolder.callback中的方法 */  
  253.     @Override  
  254.     public void surfaceChanged(SurfaceHolder holder, int format, int width,   
  255.             int height) {   
  256.         // TODO Auto-generated method stub   
  257.            
  258.     }   
  259.   
  260.     @Override  
  261.     public void surfaceCreated(SurfaceHolder holder) {   
  262.         // TODO Auto-generated method stub   
  263.            
  264.     }   
  265.   
  266.     @Override  
  267.     public void surfaceDestroyed(SurfaceHolder holder) {   
  268.         // TODO Auto-generated method stub   
  269.            
  270.     }   
  271.        
  272. }