歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android Activity編程之視頻播放界面

最近涉及到一個需要Android播放視頻的界面,內容不多,直接上代碼。

先看布局文件act_video_play,裡面有一個VideoView組件:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2.  
  3.     android:layout_width="fill_parent" 
  •     android:layout_height="fill_parent" 
  •     android:background="#ff000000" 
  •     android:gravity="center" > 
  •     <VideoView 
  •         android:id="@+id/videoView" 
  •         android:layout_width="wrap_content" 
  •         android:layout_height="wrap_content" 
  •         android:layout_gravity="center" /> 
  • </LinearLayout> 

再來看activity代碼:

  1. package com.example.playmp4; 
  2.  
  3. import android.app.Activity; 
  4. import android.app.Dialog; 
  5. import android.app.ProgressDialog; 
  6. import android.content.DialogInterface; 
  7. import android.content.DialogInterface.OnKeyListener; 
  8. import android.content.Intent; 
  9. import android.media.MediaPlayer; 
  10. import android.media.MediaPlayer.OnCompletionListener; 
  11. import android.media.MediaPlayer.OnPreparedListener; 
  12. import android.net.Uri; 
  13. import android.os.Bundle; 
  14. import android.os.Environment; 
  15. import android.util.DisplayMetrics; 
  16. import android.view.KeyEvent; 
  17. import android.widget.LinearLayout; 
  18. import android.widget.LinearLayout.LayoutParams; 
  19. import android.widget.MediaController; 
  20. import android.widget.VideoView; 
  21.  
  22. public class PlayMP4 extends Activity { 
  23.  
  24.     private VideoView videoView; 
  25.     private int play_progress; 
  26.     private String video_url; 
  27.     private String progress_Title; 
  28.     private Dialog progress; 
  29.  
  30.     @Override 
  31.     protected void onCreate(Bundle savedInstanceState) { 
  32.         super.onCreate(savedInstanceState); 
  33.         setContentView(R.layout.act_video_play); 
  34.  
  35.         Intent intent = getIntent(); 
  36.         video_url = intent.getStringExtra("video_url"); 
  37.         progress_Title = intent.getStringExtra("title"); 
  38.  
  39.         // for test  
  40.         video_url = Environment.getExternalStorageDirectory().toString() 
  41.                 + "/dcim/100MEDIA/VIDEO0002.mp4"; 
  42.  
  43.         if (this.progress_Title == null
  44.             this.progress_Title = "Loading"; 
  45.  
  46.         play_progress = intent.getIntExtra("play_progress", 0); 
  47.         videoView = (VideoView) findViewById(R.id.videoView); 
  48.         progress = ProgressDialog.show(this, "loading", progress_Title); 
  49.         progress.setOnKeyListener(new OnKeyListener() { 
  50.             @Override 
  51.             public boolean onKey(DialogInterface dialog, int keyCode, 
  52.                     KeyEvent event) { 
  53.                 if (keyCode == KeyEvent.KEYCODE_BACK) { 
  54.                     dialog.dismiss(); 
  55.                     PlayMP4.this.finish(); 
  56.                 } 
  57.                 return false
  58.             } 
  59.         }); 
  60.  
  61.         videoView.setVideoURI(Uri.parse(video_url)); 
  62.         MediaController controller = new MediaController(this); 
  63.         videoView.setMediaController(controller); 
  64.         videoView.requestFocus(); 
  65.  
  66.         videoView.setLayoutParams(new LinearLayout.LayoutParams( 
  67.             LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
  68.          
  69.         videoView.setOnPreparedListener(new OnPreparedListener() { 
  70.             @Override 
  71.             public void onPrepared(MediaPlayer mp) { 
  72.                 if (progress != null
  73.                     progress.dismiss(); 
  74.             } 
  75.         }); 
  76.  
  77.         videoView.setOnCompletionListener(new OnCompletionListener() { 
  78.             @Override 
  79.             public void onCompletion(MediaPlayer mp) { 
  80.                 if (progress != null
  81.                     progress.dismiss(); 
  82.             } 
  83.         }); 
  84.     } 
  85.  
  86.     @Override 
  87.     public boolean onKeyDown(int keyCode, KeyEvent event) { 
  88.         if (keyCode == KeyEvent.KEYCODE_BACK) { 
  89.             Intent intent = new Intent(); 
  90.             intent.putExtra("play_progress", videoView.getCurrentPosition()); 
  91.             setResult(RESULT_OK, intent); 
  92.         } 
  93.         return super.onKeyDown(keyCode, event); 
  94.     } 
  95.  
  96.     @Override 
  97.     protected void onResume() { 
  98.         super.onResume(); 
  99.         videoView.seekTo(play_progress); 
  100.         videoView.start(); 
  101.     } 
  102.  
  103.     @Override 
  104.     protected void onStop() { 
  105.         super.onStop(); 
  106.         if (videoView != null) { 
  107.             videoView.pause(); 
  108.             play_progress = videoView.getCurrentPosition(); 
  109.         } 
  110.         if (progress != null) { 
  111.             progress.dismiss(); 
  112.         } 
  113.     } 

video_url這個就是播放的地址,可以是本地文件地址,也可以是網絡上的鏈接。

play_progress為播放進度。當這個播放界面關閉後,會返回該值給上一級界面。下次再播放同一個視頻時,就可以直接從上一次停止的位置播放。如何處理記錄播放位置,這個就根據應用情況,請自行設計,這裡就不多啰嗦了。

這個就不附工程了,代碼如上。

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved