How to take a picture, save it and get a photo in Android

I was looking for a simple example to take a snapshot and save it using a URI and get a photo for image processing. I tried many code examples but none of them went smoothly.

Does anyone have an example code?

+6
source share
4 answers

define such a variable

protected static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 0; 

Use the code to call the camera from Android.

 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"fname_" + String.valueOf(System.currentTimeMillis()) + ".jpg")); intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

and in the class calling it, override the onActivityResult function and enter the code below.

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { //use imageUri here to access the image Bundle extras = data.getExtras(); Log.e("URI",imageUri.toString()); Bitmap bmp = (Bitmap) extras.get("data"); // here you will get the image as bitmap } else if (resultCode == RESULT_CANCELED) { Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT); } } } 
+10
source

There are several examples for capturing an image and saving it and opening it ...

1. Android Camera API - tutorial

2. Android developers

3. Camera example on Github

4. Another example

+5
source

I had the same problem.

I tested some codes from the Internet and could not find them. Then I studied some basic developer codes. After that I mixed two different codes and mine works! Here it is!

 public class MainActivity extends AppCompatActivity { static final int PICTURE_RESULT = 1; String mCurrentPhotoPath; ContentValues values; private Uri file; ImageView imageView; Bitmap help1; ThumbnailUtils thumbnail; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.imageView); values = new ContentValues(); } public void launch_camera(View v) { // the intent is my camera Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //getting uri of the file file = Uri.fromFile(getFile()); //Setting the file Uri to my photo intent.putExtra(MediaStore.EXTRA_OUTPUT,file); if(intent.resolveActivity(getPackageManager())!=null) { startActivityForResult(intent, PICTURE_RESULT); } } //this method will create and return the path to the image file private File getFile() { File folder = Environment.getExternalStoragePublicDirectory("/From_camera/imagens");// the file path //if it doesn't exist the folder will be created if(!folder.exists()) {folder.mkdir();} String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); String imageFileName = "JPEG_"+ timeStamp + "_"; File image_file = null; try { image_file = File.createTempFile(imageFileName,".jpg",folder); } catch (IOException e) { e.printStackTrace(); } mCurrentPhotoPath = image_file.getAbsolutePath(); return image_file; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == PICTURE_RESULT) { if(resultCode == Activity.RESULT_OK) { try { help1 = MediaStore.Images.Media.getBitmap(getContentResolver(),file); imageView.setImageBitmap( thumbnail.extractThumbnail(help1,help1.getWidth(),help1.getHeight())); }catch (Exception e){ e.printStackTrace(); } } } } } 

in XML files there is only Button and ImageView and do not forget to declare permission manifest in your android:

 <uses-feature android:name="android.hardware.camera" android:required="true" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

for more information, we offer: https://developer.android.com/training/camera/photobasics.html#TaskPhotoView https://www.youtube.com/watch?v=je9bdkdNQqg

+3
source

use the following code.

 package com.example.stackoverflow; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.math.BigInteger; import java.security.SecureRandom; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.view.View; import android.widget.Button; import android.widget.GridView; import android.widget.ImageView; public class MyCameraActivity extends Activity { private static final int CAMERA_REQUEST = 1888; static String str_Camera_Photo_ImagePath = ""; private static File f; private static int Take_Photo = 2; private static String str_randomnumber = ""; static String str_Camera_Photo_ImageName = ""; public static String str_SaveFolderName; private static File wallpaperDirectory; Bitmap bitmap; int storeposition = 0; public static GridView gridview; public static ImageView imageView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ccccc); 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) { str_SaveFolderName = Environment .getExternalStorageDirectory() .getAbsolutePath() + "/rajeshsample"; str_randomnumber = String.valueOf(nextSessionId()); wallpaperDirectory = new File(str_SaveFolderName); if (!wallpaperDirectory.exists()) wallpaperDirectory.mkdirs(); str_Camera_Photo_ImageName = str_randomnumber + ".jpg"; str_Camera_Photo_ImagePath = str_SaveFolderName + "/" + str_randomnumber + ".jpg"; System.err.println(" str_Camera_Photo_ImagePath " + str_Camera_Photo_ImagePath); f = new File(str_Camera_Photo_ImagePath); startActivityForResult(new Intent( MediaStore.ACTION_IMAGE_CAPTURE).putExtra( MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)), Take_Photo); System.err.println("f " + f); } }); } // used to create randon numbers public String nextSessionId() { SecureRandom random = new SecureRandom(); return new BigInteger(130, random).toString(32); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == Take_Photo) { String filePath = null; filePath = str_Camera_Photo_ImagePath; if (filePath != null) { Bitmap faceView = ( new_decode(new File( filePath))); // ========================> good // lines imageView.setImageBitmap(faceView); } else { bitmap = null; } } } public static Bitmap new_decode(File f) { // decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; o.inDither = false; // Disable Dithering mode o.inPurgeable = true; // Tell to gc that whether it needs free memory, // the Bitmap can be cleared o.inInputShareable = true; // Which kind of reference will be used to // recover the Bitmap data after being // clear, when it will be used in the future try { BitmapFactory.decodeStream(new FileInputStream(f), null, o); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // Find the correct scale value. It should be the power of 2. final int REQUIRED_SIZE = 300; int width_tmp = o.outWidth, height_tmp = o.outHeight; int scale = 1; while (true) { if (width_tmp / 1.5 < REQUIRED_SIZE && height_tmp / 1.5 < REQUIRED_SIZE) break; width_tmp /= 1.5; height_tmp /= 1.5; scale *= 1.5; } // decode with inSampleSize BitmapFactory.Options o2 = new BitmapFactory.Options(); // o2.inSampleSize=scale; o.inDither = false; // Disable Dithering mode o.inPurgeable = true; // Tell to gc that whether it needs free memory, // the Bitmap can be cleared o.inInputShareable = true; // Which kind of reference will be used to // recover the Bitmap data after being // clear, when it will be used in the future // return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); try { // return BitmapFactory.decodeStream(new FileInputStream(f), null, // null); Bitmap bitmap= BitmapFactory.decodeStream(new FileInputStream(f), null, null); System.out.println(" IW " + width_tmp); System.out.println("IHH " + height_tmp); int iW = width_tmp; int iH = height_tmp; return Bitmap.createScaledBitmap(bitmap, iW, iH, true); } catch (OutOfMemoryError e) { // TODO: handle exception e.printStackTrace(); // clearCache(); // System.out.println("bitmap creating success"); System.gc(); return null; // System.runFinalization(); // Runtime.getRuntime().gc(); // System.gc(); // decodeFile(f); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } } 

XML:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="photo" > </Button> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_action_search" > </ImageView> </LinearLayout> 
-1
source

All Articles