-> We will make an application with a button which when pressed opens a camera. You can take a picture then it is saved in the sdcard.
What we need?
- Eclipse ADT
- A mobile with a Camera and sdcard
Step 2 : Give a Name to your Application like CameraApp. Then click on Next...till Finish.
Step 3: Make a Button in activity_main.xml found in res->layout folder.
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:background="@drawable/ic_launcher">" <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:text="Press to Open Camera" android:background="#FFFFFF"></Button>" </RelativeLayout>
MainActivity.java
package com.mia.cameraapp; import java.io.File; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.widget.Toast; import android.app.Activity; import android.content.Intent; public class MainActivity extends Activity { public File imageFile; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); imageFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"img1.jpg"); Uri u = Uri.fromFile(imageFile); i.putExtra(MediaStore.EXTRA_OUTPUT, u); i.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); startActivityForResult(i,0); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode ==0) { switch(resultCode) { case Activity.RESULT_OK : if(imageFile.exists()) Toast.makeText(this, "Image Saved at"+imageFile.getAbsolutePath(), Toast.LENGTH_LONG).show(); break; case Activity.RESULT_CANCELED :Toast.makeText(this, "Image Not Saved", Toast.LENGTH_LONG).show(); break; default : break; } } } }Step 5: Run the Project in your Mobile phone directly since Camera will only be available in your phone. The Webcam cannot take the Camera functionality.
Explanation of the code:
- A simple button is made in activity_main.xml.
- In MainActivity class a File object is made named imageFile.
- Intent i is defined to carry out action of opening the camera and MediaStore is used to set action of capturing photo.
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- MediaStore is an inbuild class which deals with storing media like images,video etc.
imageFile = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES),"img1.jpg");
- Environment class lets us to access the sd card and store the image in it inside PICTURES directory naming the image to img.jpg.
- The Uri object will get the url of the image location and make it into a string (e.g. "sdcard/Pictures/special/").
i.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
- EXTRA_VIDEO_QUALITY decides the quality of image (1- high quality, 0-low quality).
- Then we start the Activity by using startActivity() with parameter as Intent object (i) and requestCode (0).
startActivityForResult(i,0);
- Then we decide what to do after Activity has started by overriding method onActivityResult().
protected void onActivityResult(int requestCode, int resultCode, Intent data)
- Then we check the condition if our requestCode matches the Activity(if loaded Activity is img1 only and not any other one).
- We have a switch case in it which has two cases (if result is OK / result is not OK / default).
if(requestCode ==0) { switch(resultCode) { case Activity.RESULT_OK : if(imageFile.exists()) Toast.makeText(this, "Image Saved at"+imageFile.getAbsolutePath(), Toast.LENGTH_LONG).show(); break; case Activity.RESULT_CANCELED :Toast.makeText(this, "Image Not Saved", Toast.LENGTH_LONG).show(); break; default : break; } }
Stay Tuned with Made In Android
No comments:
Post a Comment