EX07_14.java
上传用户:vip_99
上传日期:2021-03-27
资源大小:61159k
文件大小:6k
源码类别:

android开发

开发平台:

Java

  1. package irdc.ex07_14;
  2. import android.app.Activity;
  3. import android.graphics.PixelFormat;
  4. import android.media.AudioManager;
  5. import android.media.MediaPlayer;
  6. import android.os.Bundle;
  7. import android.util.Log;
  8. import android.view.SurfaceHolder;
  9. import android.view.SurfaceView;
  10. import android.view.View;
  11. import android.widget.ImageButton;
  12. import android.widget.TextView;
  13. import android.widget.Toast;
  14. /* Activity实现SurfaceHolder.Callback */
  15. public class EX07_14 extends Activity
  16. implements SurfaceHolder.Callback
  17. {
  18.   private TextView mTextView01;
  19.   private static final String TAG = "HIPPO_MediaPlayer";
  20.   
  21.   /* 创建MediaPlayer对象 */
  22.   private MediaPlayer mMediaPlayer01;
  23.   
  24.   /* SurfaceView对象作为Layout上的输出接口 */
  25.   private SurfaceView mSurfaceView01;
  26.   
  27.   /* 以SurfaceHolder来控制SurfaceView */
  28.   private SurfaceHolder mSurfaceHolder01;
  29.   
  30.   /* 四个ImageButton控制MediaPlayer事件 */
  31.   private ImageButton mPlay;
  32.   private ImageButton mPause;
  33.   private ImageButton mReset;
  34.   private ImageButton mStop;
  35.   
  36.   /* MediaPlayer暂停flag */
  37.   private boolean bIsPaused = false;
  38.   
  39.   /* MediaPlayer被释放的flag */
  40.   private boolean bIsReleased = false;
  41.   
  42.   /* 将.3gp图像文件存放在SD卡的根目录中 */
  43.   private String strVideoPath = "";
  44.   
  45.   /** Called when the activity is first created. */
  46.   @Override
  47.   public void onCreate(Bundle savedInstanceState)
  48.   {
  49.     super.onCreate(savedInstanceState);
  50.     setContentView(R.layout.main);
  51.     
  52.     if(!checkSDCard())
  53.     {
  54.       /* 提醒User未安装存储卡 */
  55.       mMakeTextToast
  56.       (
  57.         getResources().getText(R.string.str_err_nosd).toString(),
  58.         true
  59.       );
  60.     }
  61.     
  62.     mTextView01 = (TextView)findViewById(R.id.myTextView1);
  63.     
  64.     /* 设置系统PixelFormae为UNKNOW */
  65.     getWindow().setFormat(PixelFormat.UNKNOWN);
  66.     
  67.     /* 绑定Layout上的SurfaceView */
  68.     mSurfaceView01 = (SurfaceView) findViewById(R.id.mSurfaceView1);
  69.     
  70.     /* 设置SurfaceHolder为Layout SurfaceView全屏幕 */ 
  71.     mSurfaceHolder01 = mSurfaceView01.getHolder();
  72.     mSurfaceHolder01.addCallback(this);
  73.     
  74.     /* 原影片的Size为176x144 */
  75.     mSurfaceHolder01.setFixedSize(176,144);
  76.     mSurfaceHolder01.setType
  77.     (SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  78.     
  79.     /* 4个ImageButton */
  80.     mPlay = (ImageButton) findViewById(R.id.play); 
  81.     mPause = (ImageButton) findViewById(R.id.pause); 
  82.     mReset = (ImageButton) findViewById(R.id.reset); 
  83.     mStop = (ImageButton) findViewById(R.id.stop);
  84.     
  85.     /* 设置测试用影片位置 */
  86.     strVideoPath = "/sdcard/test.3gp";
  87.     
  88.     /* 播放按钮 */
  89.     mPlay.setOnClickListener(new ImageButton.OnClickListener()
  90.     { 
  91.       public void onClick(View view)
  92.       {
  93.         /* 调用播放影片Function */
  94.         if(checkSDCard())
  95.         {
  96.           playVideo(strVideoPath);
  97.         }
  98.       }
  99.     });
  100.     
  101.     /* 暂停按钮 */
  102.     mPause.setOnClickListener(new ImageButton.OnClickListener()
  103.     {
  104.       public void onClick(View view)
  105.       {
  106.         if(checkSDCard())
  107.         {
  108.           if (mMediaPlayer01 != null)
  109.           {
  110.             if(bIsReleased == false)
  111.             {
  112.               if(bIsPaused==false)
  113.               {
  114.                 mMediaPlayer01.pause();
  115.                 bIsPaused = true;
  116.                 mTextView01.setText(R.string.str_pause);
  117.               }
  118.               else if(bIsPaused==true)
  119.               {
  120.                 mMediaPlayer01.start();
  121.                 bIsPaused = false;
  122.                 mTextView01.setText(R.string.str_play);
  123.               }
  124.             }
  125.           }
  126.         }
  127.       }
  128.     });
  129.     
  130.     /* 重新播放按钮 */
  131.     mReset.setOnClickListener(new ImageButton.OnClickListener()
  132.     { 
  133.       public void onClick(View view)
  134.       {
  135.         if(checkSDCard())
  136.         {
  137.           if(bIsReleased == false)
  138.           {
  139.             if (mMediaPlayer01 != null)
  140.             { 
  141.               mMediaPlayer01.seekTo(0);
  142.             }
  143.           }
  144.         }
  145.       } 
  146.     });
  147.     
  148.     /* 终止按钮 */
  149.     mStop.setOnClickListener(new ImageButton.OnClickListener()
  150.     { 
  151.       public void onClick(View view)
  152.       {
  153.         if(checkSDCard())
  154.         {
  155.           if (mMediaPlayer01 != null)
  156.           {
  157.             if(bIsReleased==false)
  158.             {
  159.               mMediaPlayer01.stop();
  160.               mMediaPlayer01.release();
  161.               bIsReleased = true;
  162.               mTextView01.setText(R.string.str_stop);
  163.             }          
  164.           }
  165.         }
  166.       }
  167.     });
  168.   }
  169.   
  170.   /* 自定义播放影片函数 */
  171.   private void playVideo(String strPath)
  172.   { 
  173.     mMediaPlayer01 = new MediaPlayer();
  174.     mMediaPlayer01.setAudioStreamType(AudioManager.STREAM_MUSIC);
  175.     
  176.     /* 设置Video影片以SurfaceHolder播放 */
  177.     mMediaPlayer01.setDisplay(mSurfaceHolder01);
  178.     
  179.     try
  180.     { 
  181.       mMediaPlayer01.setDataSource(strPath);
  182.     }
  183.     catch (Exception e)
  184.     { 
  185.       // TODO Auto-generated catch block
  186.       mTextView01.setText("setDataSource Exceeption:"+e.toString());
  187.       e.printStackTrace();
  188.     }
  189.     
  190.     try
  191.     { 
  192.       mMediaPlayer01.prepare();
  193.     }
  194.     catch (Exception e)
  195.     { 
  196.       // TODO Auto-generated catch block
  197.       mTextView01.setText("prepare Exceeption:"+e.toString());
  198.       e.printStackTrace(); 
  199.     }
  200.     mMediaPlayer01.start();
  201.     bIsReleased = false;
  202.     mTextView01.setText(R.string.str_play);
  203.     
  204.     mMediaPlayer01.setOnCompletionListener
  205.     (new MediaPlayer.OnCompletionListener()
  206.     {
  207.       @Override
  208.       public void onCompletion(MediaPlayer arg0)
  209.       {
  210.         // TODO Auto-generated method stub
  211.         mTextView01.setText(R.string.str_stop);
  212.       }
  213.     });
  214.   }
  215.   
  216.   private boolean checkSDCard()
  217.   {
  218.     /* 判断存储卡是否存在 */
  219.     if(android.os.Environment.getExternalStorageState().equals
  220.     (android.os.Environment.MEDIA_MOUNTED))
  221.     {
  222.       return true;
  223.     }
  224.     else
  225.     {
  226.       return false;
  227.     }
  228.   }
  229.   
  230.   public void mMakeTextToast(String str, boolean isLong)
  231.   {
  232.     if(isLong==true)
  233.     {
  234.       Toast.makeText(EX07_14.this, str, Toast.LENGTH_LONG).show();
  235.     }
  236.     else
  237.     {
  238.       Toast.makeText(EX07_14.this, str, Toast.LENGTH_SHORT).show();
  239.     }
  240.   }
  241.   
  242.   @Override
  243.   public void surfaceChanged
  244.   (SurfaceHolder surfaceholder, int format, int w, int h)
  245.   {
  246.     // TODO Auto-generated method stub
  247.     Log.i(TAG, "Surface Changed");
  248.   }
  249.   
  250.   @Override
  251.   public void surfaceCreated(SurfaceHolder surfaceholder)
  252.   {
  253.     // TODO Auto-generated method stub
  254.     Log.i(TAG, "Surface Changed");
  255.   }
  256.   
  257.   @Override
  258.   public void surfaceDestroyed(SurfaceHolder surfaceholder)
  259.   {
  260.     // TODO Auto-generated method stub
  261.     Log.i(TAG, "Surface Destroyed");
  262.   }
  263. }