Monday, May 20, 2013

Camera Video Capture And Save On SDCard - Android Example


XML FILE : AndroidManifest.xml

 



<?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.androidexample.camera"
      android:versionCode="1"
      android:versionName="1.0">
     
    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="17" />
    <application android:icon="@drawable/icon"
        android:label="@string/app_name">
        <activity android:name="com.androidexample.camera.VideocameraActivity"
                  android:screenOrientation="portrait"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
     
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- For android.media.audiofx.Visualizer -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <!-- We will request access to the camera, saying we require a camera
         of some sort but not one with autofocus capability. -->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
     
</manifest>


JAVA FILE : VideocameraActivity.php

 

 1.  Opening android phone inbuild camera by camera intent.
  2.  Capture photo and again return on VideocameraActivity.java onActivityResult method.
  3.  Inside onActivityResult method getting captured video saved path and showing path on activity.

package com.valkeshexample.camera;
import java.io.File;
import java.text.SimpleDateFormat;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class VideocameraActivity extends Activity {
     
    private Uri fileUri;
    public static final int MEDIA_TYPE_VIDEO = 2;
    private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;
    public static VideocameraActivity ActivityContext =null;
    public static TextView val_output;
     
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ActivityContext = this;
         
        Button buttonRecording = (Button)findViewById(R.id.recording);
        val_output = (TextView)findViewById(R.id.val_output);
         
        buttonRecording.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View arg0) {
                 
                // create new Intentwith with Standard Intent action that can be
                // sent to have the camera application capture an video and return it.
                Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                // create a file to save the video
                fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);
                 
                // set the image file name 
                intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
                 
                // set the video image quality to high
                intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
                // start the Video Capture Intent
                startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
                 
            }});
         
         
    }
     
    /** Create a file Uri for saving an image or video */
    private static Uri getOutputMediaFileUri(int type){
         
          return Uri.fromFile(getOutputMediaFile(type));
    }
    /** Create a File for saving an image or video */
    private static File getOutputMediaFile(int type){
         
        // Check that the SDCard is mounted
        File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
                  Environment.DIRECTORY_PICTURES), "MyCameraVideo");
         
         
        // Create the storage directory(MyCameraVideo) if it does not exist
        if (! mediaStorageDir.exists()){
             
            if (! mediaStorageDir.mkdirs()){
                 
                val_output.setText("Failed to create directory MyCameraVideo.");
                 
                Toast.makeText(ActivityContext, "Failed to create directory MyCameraVideo.",
                        Toast.LENGTH_LONG).show();
                 
                Log.d("MyCameraVideo", "Failed to create directory MyCameraVideo.");
                return null;
            }
        }
         
        // Create a media file name
         
        // For unique file name appending current timeStamp with file name
        java.util.Date date= new java.util.Date();
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
                             .format(date.getTime());
         
        File mediaFile;
         
        if(type == MEDIA_TYPE_VIDEO) {
             
            // For unique video file name appending current timeStamp with file name
            mediaFile = new File(mediaStorageDir.getPath() + File.separator +
            "VID_"+ timeStamp + ".mp4");
             
        } else {
            return null;
        }
        return mediaFile;
    }
     
     
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         
        // After camera screen this code will excuted
         
        if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) {
             
            if (resultCode == RESULT_OK) {
                 
                val_output.setText("Video File : " +data.getData());
                 
                // Video captured and saved to fileUri specified in the Intent
                Toast.makeText(this, "Video saved to:
" +
                         data.getData(), Toast.LENGTH_LONG).show();
                 
            } else if (resultCode == RESULT_CANCELED) {
                 
                val_output.setText("User cancelled the video capture.");
                 
                // User cancelled the video capture
                Toast.makeText(this, "User cancelled the video capture.",
                        Toast.LENGTH_LONG).show();
                 
            } else {
                 
                val_output.setText("Video capture failed.");
                 
                // Video capture failed, advise user
                Toast.makeText(this, "Video capture failed.",
                        Toast.LENGTH_LONG).show();
            }
        }
    }
     
}

XML FILE : 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"
    >
      <Button
            android:id="@+id/recording"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Capture Video"
            />
   <TextView 
    android:id="@+id/val_output"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"
     
    />
</LinearLayout>
 
 

 

No comments:

Post a Comment