Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Capture Image from Camera and Display in Activity

I want to write a module where on a click of a button the camera opens and I can click and capture an image. If I don't like the image I can delete it and click one more image and then select the image and it should return back and display that image in the activity.

like image 488
Harsha M V Avatar asked May 13 '11 11:05

Harsha M V


People also ask

How do you open camera through intent and display captured image?

Intent camera_intent = new Intent(MediaStore. ACTION_IMAGE_CAPTURE); startActivityForResult(camera_intent, pic_id); Now use onActivityResult() method to get the result, here the captured image.

How do I add a picture to my activity?

xml (or any activity you need to add image) and select the Design view. There you can see your Palette tool box on left side. You need to drag and drop ImageView. Select the image you want press Ok you can see the image on the Design view.


1 Answers

Here's an example activity that will launch the camera app and then retrieve the image and display it.

package edu.gvsu.cis.masl.camerademo;  import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView;  public class MyCameraActivity extends Activity {     private static final int CAMERA_REQUEST = 1888;      private ImageView imageView;     private static final int MY_CAMERA_PERMISSION_CODE = 100;      @Override     public void onCreate(Bundle savedInstanceState)     {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         this.imageView = (ImageView)this.findViewById(R.id.imageView1);         Button photoButton = (Button) this.findViewById(R.id.button1);         photoButton.setOnClickListener(new View.OnClickListener()         {             @Override             public void onClick(View v)             {                 if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)                 {                     requestPermissions(new String[]{Manifest.permission.CAMERA}, MY_CAMERA_PERMISSION_CODE);                 }                 else                 {                     Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);                      startActivityForResult(cameraIntent, CAMERA_REQUEST);                 }              }         });     }      @Override     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)     {         super.onRequestPermissionsResult(requestCode, permissions, grantResults);         if (requestCode == MY_CAMERA_PERMISSION_CODE)         {             if (grantResults[0] == PackageManager.PERMISSION_GRANTED)             {                 Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();                 Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);                  startActivityForResult(cameraIntent, CAMERA_REQUEST);             }             else             {                 Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show();             }         }     }      @Override     protected void onActivityResult(int requestCode, int resultCode, Intent data)     {           if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK)         {               Bitmap photo = (Bitmap) data.getExtras().get("data");              imageView.setImageBitmap(photo);         }       }  } 

Note that the camera app itself gives you the ability to review/retake the image, and once an image is accepted, the activity displays it.

Here is the layout that the above activity uses. It is simply a LinearLayout containing a Button with id button1 and an ImageView with id imageview1:

<?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/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/photo"></Button>     <ImageView android:id="@+id/imageView1" android:layout_height="wrap_content" android:src="@drawable/icon" android:layout_width="wrap_content"></ImageView>  </LinearLayout> 

And one final detail, be sure to add:

<uses-feature android:name="android.hardware.camera"></uses-feature>  

and if camera is optional to your app functionality. make sure to set require to false in the permission. like this

<uses-feature android:name="android.hardware.camera" android:required="false"></uses-feature> 

to your manifest.xml.

like image 77
jengelsma Avatar answered Oct 14 '22 00:10

jengelsma