Showing posts with label example. Show all posts
Showing posts with label example. Show all posts

Saturday, June 2, 2012

Save Activity state example in Android

In some application it is needed to store activity state/data. If this data not store before activity finishes it loss the data. So before finishing activity you need to store data somewhere from where you can get it back when activity restarted.

There are many way to store activity state but here I am uses of SharePreferences. It uses because it easy to manage to user.

Here is complete example of save state of activity.

----------------------------------------------------------------------------------------------

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;

public class SavingActivityStateActivity extends Activity {
   
   
    @Override
    protected void onDestroy() {
        saveState();
        super.onDestroy();
    }

    EditText etName;
    EditText etAddress;
    EditText etEmail;
    EditText etPno;
   
    RadioGroup rgGender;
    CheckBox chbsingle;
    Spinner spEdu;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        loadUI();    // it load previously saved data if any data stored in preference.
     
    }
  
// load data from saved preference.
    private void loadUI() {
       
        SharedPreferences savedPref=getPreferences(MODE_PRIVATE);
       
        setEditText(R.id.etName,  savedPref.getString("Name", ""));
        setEditText(R.id.etAddress,  savedPref.getString("Address", ""));
        setEditText(R.id.etEmail,  savedPref.getString("Email", ""));
        setEditText(R.id.etPno,  savedPref.getString("Pno", ""));
       
        String gender=savedPref.getString("Gender", "Male");
       

        rgGender=(RadioGroup) findViewById(R.id.rgGender);
       
        if(gender.equals("Male"))
        {
            RadioButton rbMale=(RadioButton) findViewById(R.id.rbMale);
            rbMale.setChecked(true);
        }
        else if(gender.equals("Female"))
        {
            RadioButton rbFemale=(RadioButton) findViewById(R.id.rbFemale);
            rbFemale.setChecked(true);
        }
       
        boolean single=savedPref.getBoolean("Single", true);
        chbsingle=(CheckBox) findViewById(R.id.chbSingle);
       
        chbsingle.setChecked(single);
       
        spEdu=(Spinner) findViewById(R.id.spEducation);
        int edu=savedPref.getInt("Edu", 0);
        spEdu.setSelection(edu);
       
    }

    @Override
    protected void onPause() {
   
        super.onPause();
        // before finishing activity data of each field is store to preference using this method.
        saveState();
    }

    // save data to preference
    private void saveState() {
        SharedPreferences savePref=getPreferences(MODE_PRIVATE);
        // create preference

        SharedPreferences.Editor editor=savePref.edit();
        // create editor of preference to edit


        // following code save each value of view to share preference       
        editor.putString("Name",getEditText(R.id.etName));
        editor.putString("Address",getEditText(R.id.etAddress));
        editor.putString("Email",getEditText(R.id.etEmail));
        editor.putString("Pno",getEditText(R.id.etPno));
       
        rgGender=(RadioGroup) findViewById(R.id.rgGender);
        int selected=rgGender.getCheckedRadioButtonId();
       
        RadioButton rbSelected=(RadioButton) findViewById(selected);
        String gender=rbSelected.getText().toString();
   

        editor.putString("Gender", gender);
       
        chbsingle=(CheckBox) findViewById(R.id.chbSingle);
       
        boolean single=chbsingle.isChecked();
       
        editor.putBoolean("Single", single);
       
        spEdu=(Spinner) findViewById(R.id.spEducation);
       
        int edu=spEdu.getSelectedItemPosition();
       
        editor.putInt("Edu", edu);
        editor.commit();
    }

    private String getEditText(int id)
    {
        String text="";
       
        EditText et=(EditText) findViewById(id);
        text=et.getText().toString();
        return text;
    }
   
   
    private void setEditText(int id, String text)
    {   
        EditText et=(EditText) findViewById(id);
        et.setText(text);
    }
}

Friday, June 1, 2012

Video Recording example in Android

Here is complete example of how to record video in android device.
(Note: test project in real device not in emulator)

1.  Video View Activity
   
     
import java.io.File;
import java.io.IOException;
import java.util.Date;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.Menu;
import android.view.SurfaceView;
import android.widget.Toast;

public class VideoViewActivity extends Activity implements Callback {

    @Override
    protected void onDestroy() {
        stopRecording();
        super.onDestroy();
    }

    private SurfaceHolder surfaceHolder;
    private SurfaceView surfaceView;
    public MediaRecorder mrec = new MediaRecorder();   
    private Camera mCamera;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        surfaceView = (SurfaceView) findViewById(R.id.surface_camera);
        mCamera = Camera.open();
       
        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
               
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {

        menu.add(0, 0, 0, "Start");
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        if(item.getTitle().equals("Start"))
        {
            try {
               
                startRecording();
                item.setTitle("Stop");

            } catch (Exception e) {

                String message = e.getMessage();
                Log.i(null, "Problem " + message);
                mrec.release();
            }

        }
        else if(item.getTitle().equals("Stop"))
        {
            mrec.stop();
            mrec.release();
            mrec = null;
            item.setTitle("Start");
        }

        return super.onOptionsItemSelected(item);
    }

    protected void startRecording() throws IOException
    {
        if(mCamera==null)
            mCamera = Camera.open();
       
         String filename;
         String path;
       
         path= Environment.getExternalStorageDirectory().getAbsolutePath().toString();
        
         Date date=new Date();
         filename="/rec"+date.toString().replace(" ", "_").replace(":", "_")+".mp4";
        
         //create empty file it must use
         File file=new File(path,filename);
        
        mrec = new MediaRecorder();

        mCamera.lock();
        mCamera.unlock();

        // Please maintain sequence of following code.

        // If you change sequence it will not work.
        mrec.setCamera(mCamera);   
        mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mrec.setAudioSource(MediaRecorder.AudioSource.MIC);    
        mrec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mrec.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
        mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        mrec.setPreviewDisplay(surfaceHolder.getSurface());
        mrec.setOutputFile(path+filename);
        mrec.prepare();
        mrec.start();

       
    }

    protected void stopRecording() {

        if(mrec!=null)
        {
            mrec.stop();
            mrec.release();
            mCamera.release();
            mCamera.lock();
        }
    }

    private void releaseMediaRecorder() {

        if (mrec != null) {
            mrec.reset(); // clear recorder configuration
            mrec.release(); // release the recorder object
        }
    }

    private void releaseCamera() {
        if (mCamera != null) {
            mCamera.release(); // release the camera for other applications
            mCamera = null;
        }

    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {     

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {      

        if (mCamera != null) {
            Parameters params = mCamera.getParameters();
            mCamera.setParameters(params);
            Log.i("Surface", "Created");
        }
        else {
            Toast.makeText(getApplicationContext(), "Camera not available!",
                    Toast.LENGTH_LONG).show();

            finish();
        }

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.stopPreview();
        mCamera.release();      

    }
}




2. main.xml file


      
         <SurfaceView android:id="@+id/surface_camera"     xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_centerInParent="true"
        android:layout_weight="1"
        >
    </SurfaceView>






3.  Get following permission in AndroidManifest.xml

  
      <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>