Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android技術基礎 >> 第55章、播放視頻(從零開始學Android)

第55章、播放視頻(從零開始學Android)

編輯:Android技術基礎

在Android中,我們有三種方式來實現視頻的播放:

1、使用其自帶的播放器。指定Action為ACTION_VIEW,Data為Uri,Type為其MIME類型。

2、使用VideoView來播放。在布局文件中使用VideoView結合MediaController來實現對其控制。

3、使用MediaPlayer類和SurfaceView來實現,這種方式很靈活。

本案例著重講解第三種MediaPlayer方式:MediaPlayer播放視頻除了利用MediaPlayer,還需要SurfaceView與之配合,Surface可以完成對後台線程的控制,對於視頻、3D加速或者高頻率對象都有很大的用途。

 

一、設計界面

1、首先把play.png、stop.png兩張圖片復制到res/drawable-hdpi文件夾內。

\

2、布局文件

打開activity_main.xml文件。

輸入以下代碼:

[html] view plain copy  
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2.   
  3. <LinearLayout   
  4.     xmlns:android="http://schemas.android.com/apk/res/android"   
  5.     android:orientation="vertical"   
  6.     android:layout_width="fill_parent"   
  7.     android:layout_height="fill_parent">  
  8.   
  9.     <ImageButton  
  10.         android:id="@+id/playvideo"  
  11.         android:layout_width="wrap_content"  
  12.         android:layout_height="wrap_content"  
  13.         android:src="@drawable/play" />  
  14.   
  15.     <ImageButton  
  16.         android:id="@+id/stopvideo"  
  17.         android:layout_width="wrap_content"  
  18.         android:layout_height="wrap_content"  
  19.         android:src="@drawable/stop" />  
  20.   
  21.     <SurfaceView  
  22.         android:id="@+id/surface"  
  23.         android:layout_width="wrap_content"  
  24.         android:layout_height="wrap_content" />  
  25.   
  26. </LinearLayout>  


 

二、程序文件

打開“src/com.genwoxue.mp3/MainActivity.java”文件。

然後輸入以下代碼

[java] view plain copy  
  1. package com.genwoxue.videoplayer;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import android.app.Activity;  
  6. import android.media.AudioManager;  
  7. import android.media.MediaPlayer;  
  8. import android.os.Bundle;  
  9. import android.os.Environment;  
  10. import android.view.SurfaceHolder;  
  11. import android.view.SurfaceView;  
  12. import android.view.View;  
  13. import android.view.View.OnClickListener;  
  14. import android.widget.ImageButton;  
  15.   
  16. public class MainActivity extends Activity{  
  17.   
  18.     private SurfaceView surfaceView=null;  
  19.     private SurfaceHolder surfaceHolder=null;  
  20.     private MediaPlayer media=null;  
  21.     private ImageButton btnPlay=null;  
  22.     private ImageButton btnStop=null;  
  23.       
  24.     @Override  
  25.     public void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.activity_main);  
  28.           
  29.         //獲得surfaceView對象  
  30.         surfaceView = (SurfaceView) this.findViewById(R.id.surface);  
  31.         //獲得surfaceHolder對象  
  32.         surfaceHolder = this.surfaceView.getHolder();  
  33.         //設置 SurfaceView類型  
  34.         surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
  35.   
  36.         //創建MediaPlayer對象  
  37.         media=new MediaPlayer();  
  38.         try {  
  39.             this.media.setDataSource(       //設置視頻源,即視頻路徑  
  40.                     Environment.getExternalStorageDirectory()  
  41.                     .getPath()  
  42.                     +"/genwoxue/mybaby.3gp");  
  43.         } catch (IllegalArgumentException e) {  
  44.             e.printStackTrace();  
  45.         } catch (SecurityException e) {  
  46.             e.printStackTrace();  
  47.         } catch (IllegalStateException e) {  
  48.             e.printStackTrace();  
  49.         } catch (IOException e) {  
  50.             e.printStackTrace();  
  51.         }  
  52.           
  53.         btnPlay=(ImageButton)super.findViewById(R.id.playvideo);  
  54.         btnStop=(ImageButton)super.findViewById(R.id.stopvideo);  
  55.           
  56.         //播放視頻  
  57.         btnPlay.setOnClickListener(new OnClickListener(){  
  58.             @Override   
  59.             public void onClick(View v){  
  60.                     media.setAudioStreamType(AudioManager.STREAM_MUSIC);  
  61.                     media.setDisplay(MainActivity.this.surfaceHolder);  
  62.                   
  63.                 try {  
  64.                         media.prepare();  
  65.                 } catch (IllegalStateException e) {  
  66.                     e.printStackTrace();  
  67.                 } catch (IOException e) {  
  68.                     e.printStackTrace();  
  69.                 }  
  70.                     media.start();  
  71.             }  
  72.               
  73.         });  
  74.           
  75.         //停止視頻  
  76.         btnStop.setOnClickListener(new OnClickListener(){  
  77.             @Override   
  78.             public void onClick(View v){  
  79.                 media.stop();  
  80.             }  
  81.               
  82.         });  
  83.     }  
  84.   
  85. }  


三、運行結果

\

單擊“播放”按鈕,“裡約大冒險”正在為您熱映……

 

 

附:

(1)使用其自帶的播放器。指定Action為ACTION_VIEW,Data為Uri,Type為其MIME類型。

[java] view plain copy  
  1. Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v");     
  2. //調用系統自帶的播放器    
  3.     Intent intent = new Intent(Intent.ACTION_VIEW);    
  4.     Log.v("URI:::::::::", uri.toString());    
  5.     intent.setDataAndType(uri, "video/mp4");    
  6.     startActivity(intent);    


(2)使用VideoView來播放。在布局文件中使用VideoView結合MediaController來實現對其控制。

[java] view plain copy  
  1. Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v");    
  2. VideoView videoView = (VideoView)this.findViewById(R.id.video_view);    
  3. videoView.setMediaController(new MediaController(this));    
  4. videoView.setVideoURI(uri);    
  5. videoView.start();    
  6. videoView.requestFocus();    
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved