編輯: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了吧。
Android登錄實例
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩
Android ApiDemo示例解讀系列之二:ListActivity、SimpleAdapter和PackageManager
如上一節中所講的那樣創建了ApiDemo工程後,我們就可以進行每個示例代碼的分
Android提高之藍牙隱藏API探秘
前面文章講解了Android的藍牙基本用法,本文講得深入些,探討下藍牙方面的隱藏API。用過Android系統設置(Setting)的人都知道藍牙搜索之後可以建立
android編程之XML文件解析方法詳解(附源碼)
本文實例講述了android編程之XML文件解析方法。分享給大家供大家參考,具體如下: 在android開發中,經常用到去解析xml文件,常見的解析xml的方式有