編輯:Android開發實例
在其他的平台上面可能VideoPlayer開發是一個比較有挑戰性的工作,但是在Android上面VideoPlayer的開發,基本上可以做到傻瓜式啦。本文簡單對VideoPlayer的開發進行簡單的介紹。
在Android系統中,是通過MediaPalyer類播放媒體文件的(包括視頻和音頻)。雖然這個類已經比較簡單了,但是還需要控制各種狀態,對於視頻還需要設置輸出窗口,還是需要仔細研究的。為了避免這些麻煩事兒,Android框架提供了VideoView類來封裝MediaPalyer,這個VideoView類非常好用。Android自帶的程序Gallery也是用VideoView實現的。本文以實例介紹怎樣用VideoView來實現VideoPlayer,本文也參考了Android自帶程序Gallery的實現。
創建一個VideoPlayer的工程。main.xml文件如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <VideoView android:id="@+id/video_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerInParent="true" /> </LinearLayout>
VideoPlayer.java文件如下:
package com.simon; import android.app.Activity; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.widget.MediaController; import android.widget.VideoView; import android.content.pm.ActivityInfo; public class VideoPlayer extends Activity implements MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener { public static final String TAG = "VideoPlayer"; private VideoView mVideoView; private Uri mUri; private int mPositionWhenPaused = -1; private MediaController mMediaController; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //Set the screen to landscape. this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); mVideoView = (VideoView)findViewById(R.id.video_view); //Video file mUri = Uri.parse(Environment.getExternalStorageDirectory() + "/1.3gp"); //Create media controller mMediaController = new MediaController(this); mVideoView.setMediaController(mMediaController); } public void onStart() { // Play Video mVideoView.setVideoURI(mUri); mVideoView.start(); super.onStart(); } public void onPause() { // Stop video when the activity is pause. mPositionWhenPaused = mVideoView.getCurrentPosition(); mVideoView.stopPlayback(); Log.d(TAG, "OnStop: mPositionWhenPaused = " + mPositionWhenPaused); Log.d(TAG, "OnStop: getDuration = " + mVideoView.getDuration()); super.onPause(); } public void onResume() { // Resume video player if(mPositionWhenPaused >= 0) { mVideoView.seekTo(mPositionWhenPaused); mPositionWhenPaused = -1; } super.onResume(); } public boolean onError(MediaPlayer player, int arg1, int arg2) { return false; } public void onCompletion(MediaPlayer mp) { this.finish(); } }
本例中只是播放外存儲器(一般是sd卡)上的1.3gp文件。在onCreate方法中創建了Media control,這個組件可以控制視頻的播放,暫停,回復,seek等操作,不需要你實現。
//Create media controller mMediaController = new MediaController(this); mVideoView.setMediaController(mMediaController);
然後只需要調用VideoView類的setVideoURI設置播放文件,start方法開始播放即可。
為了節省系統資源,一般需要在Activity的onPause方法中,暫停視頻的播放。因為Activity已經不在前台了。在Activity的onResume中恢復視頻的播放,因為這是Activity又變成前台程序了。不清楚的朋友可以去查看Activity lifecycle。
你可以通過實現MediaPlayer.OnErrorListener來監聽MediaPlayer上報的錯誤信息。實現MediaPlayer.OnCompletionListener接口,將會在Video播完的時候得到通知,本例只是簡單的結束程序。
你可能注意到,我們沒有管理MediaPalyer的各種狀態,這些狀態都讓VideoView給封裝了,並且,當VideoView創建的時候,MediaPalyer對象將會創建,當VideoView對象銷毀的時候,MediaPlayer對象將會釋放。這樣基本可以傻瓜式的實現媒體播放器了,太Easy了吧。
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩
如上一節中所講的那樣創建了ApiDemo工程後,我們就可以進行每個示例代碼的分
前面文章講解了Android的藍牙基本用法,本文講得深入些,探討下藍牙方面的隱藏API。用過Android系統設置(Setting)的人都知道藍牙搜索之後可以建立
本文實例講述了android編程之XML文件解析方法。分享給大家供大家參考,具體如下: 在android開發中,經常用到去解析xml文件,常見的解析xml的方式有