آموزش ایجاد Videoview در برنامه نویسی اندروید

سلام دوستان در این سری از آموزش های برنامه نویسی اندروید به آموزش ایجاد Videoview در برنامه نویسی اندروید می پردازیم. بعضی ها می گویند که فقط ویدیو هایی با فرمت 3gp قابل اجرا در videoview هستند بلکه این طور نیست و فرمت mp4 نیز پشتیبانی می شود.در ادامه با ما  همراه باشید. برای این کار ابتدا ما باید فایل layout خود را باز (activity-main.xml) و کد زیر را در آن قرار دهیم.
 

<?xml version="1.0" encoding="utf-8"?>
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:layout_gravity="center" >
     <VideoView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"/>
  </FrameLayout>

فایل Mainactivity.java را باز کرده کد های زیر را در آن قرار دهید.

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.res.Configuration;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.widget.MediaController;
import android.widget.VideoView;
public class AndroidVideoViewExample extends Activity {
	private VideoView myVideoView;
	private int position = 0;
	private ProgressDialog progressDialog;
	private MediaController mediaControls;
	@Override
	protected void onCreate(final Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//set the media controller buttons
		if (mediaControls == null) {
			mediaControls = new MediaController(AndroidVideoViewExample.this);
		}
		//initialize the VideoView
		myVideoView = (VideoView) findViewById(R.id.video_view);
		// create a progress bar while the video file is loading
		progressDialog = new ProgressDialog(MainActivity.this);
		// set a title for the progress bar
		progressDialog.setTitle("Android Video View Example Programchi.ir");
		progressDialog.setMessage("Loading...");
		progressDialog.setCancelable(false);
		progressDialog.show();
		try {
			//set the media controller in the VideoView
			myVideoView.setMediaController(mediaControls);
			//set the uri of the video to be played
			myVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.kitkat));
		} catch (Exception e) {
			Log.e("Error", e.getMessage());
			e.printStackTrace();
		}
		myVideoView.requestFocus();
		//we also set an setOnPreparedListener in order to know when the video file is ready for playback
		myVideoView.setOnPreparedListener(new OnPreparedListener() {
			public void onPrepared(MediaPlayer mediaPlayer) {
				// close the progress bar and play the video
				progressDialog.dismiss();
				//if we have a position on savedInstanceState, the video playback should start from here
				myVideoView.seekTo(position);
				if (position == 0) {
					myVideoView.start();
				} else {
					//if we come from a resumed activity, video playback will be paused
					myVideoView.pause();
				}
			}
		});
	}
	@Override
	public void onSaveInstanceState(Bundle savedInstanceState) {
		super.onSaveInstanceState(savedInstanceState);
		//we use onSaveInstanceState in order to store the video playback position for orientation change
		savedInstanceState.putInt("Position", myVideoView.getCurrentPosition());
		myVideoView.pause();
	}
	@Override
	public void onRestoreInstanceState(Bundle savedInstanceState) {
		super.onRestoreInstanceState(savedInstanceState);
		position = savedInstanceState.getInt("Position");
		myVideoView.seekTo(position);
	}
}

ما در ابتدا videview را پیدا می کنیم سپس یک progressDailog ایجاد می کنیم (قبل تر آموزش ProgressDialog را قرار داده بودیم کافی است سرچ کنید) ما دو تا void داریم که دو کار انجام می دهند اولی onSaveInstanceState مقدار ویدیویی که نمایش داده شده است را ذخیره می کند تا در صورت خروج از آن بتوانیم دوباره از ادامه آن ویدیو رو ببینیم و onRestoreInstanceState مقدار زمانی video را بر می گرداند برای نمایش ادامه ویدیو و setOnPreparedListener این listener بررسی می کند که چه زمانی ویدیو برای نمایش آماده شده است.
و برای اینکه مسیر ویدیو رو تنظیم کنیم از setVideoURI استفاده می کنیم برای اینکه از توی خود برنامه ویدیو اجرا شود شما باید یک فولدر به نام raw ایجاد کنید و فیلم خود را در آن قرار دهید سپس مسیر آن را همانند بالا تنظیم کنید و MediaController دکمه های است که برای ویدیو ما نمایش داده می شود(دکمه بعدی قبلی و pause ).
 
حالا به بخش AndroidManifest بروید و آن جایی که اکتیویتی را ایجاد می کند (همون اکتیویتی که videoview را در آن قرار دادید) خط زیر را به آن اضافه کنید.

android:configChanges="orientation">

به شکل زیر می شود.

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:configChanges="orientation">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

این آموزش هم به پایان رسید امیدوارم مفید بوده باشد.
موفق باشید.

مطالعه بیشتر