Introduction
This article explains how to open the gallery in your phone and display the selected images, capture a photo from the camera and save it to the gallery of your Android phone.
First, the user will need to choose if he/she wants to select an image from the gallery or wants to capture an image from the camera. Then depending on the option chosen by the user, we will either open the gallery or capture an image.
Step 1
Open "AndroidManifest" and add the following code to it:
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.chhavi.uploadingandviewimage"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-permission android:name="android.permission.CAMERA" />
- <uses-feature android:name="android.hardware.camera" />
- <uses-feature android:name="android.hardware.camera.autofocus" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-sdk
- android:minSdkVersion="7"
- android:targetSdkVersion="16" />
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <activity
- android:name="com.chhavi.uploadingandviewimage.MainActivity"
- 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>
- </manifest>
Note the permission "WRITE_EXTERNAL_STORAGE" is to save the image captured to the gallery. "CAMERA" permissions enables use of the camera of your Android phone.
Step 2
Open "activity_main" and add the following code to it:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/LinearLayout1"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:padding="10dp" >
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:padding="5dp" >
- <Button
- android:id="@+id/btnSelectPhoto"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="Select Photo" />
- </LinearLayout>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:padding="10dp" >
- <ImageView
- android:id="@+id/viewImage"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:src="@drawable/camera" />
- </LinearLayout>
- </LinearLayout>
The layout looks like:
Later the selected image will be displayed in the ImageView.
Step 3
Open "MainActivity" and add the following code to it:
- package com.chhavi.uploadingandviewimage;
- import android.app.AlertDialog;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.database.Cursor;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.net.Uri;
- import android.os.Bundle;
- import android.app.Activity;
- import android.os.Environment;
- import android.provider.MediaStore;
- import android.util.Log;
- import android.view.Menu;
- import android.view.View;
- import android.widget.Button;
- import android.widget.ImageView;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
-
- public class MainActivity extends Activity {
- ImageView viewImage;
- Button b;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- b=(Button)findViewById(R.id.btnSelectPhoto);
- viewImage=(ImageView)findViewById(R.id.viewImage);
- b.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- selectImage();
- }
- });
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
-
- getMenuInflater().inflate(R.menu.main, menu);
- return true;
- }
- private void selectImage() {
- final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" };
- AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
- builder.setTitle("Add Photo!");
- builder.setItems(options, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int item) {
- if (options[item].equals("Take Photo"))
- {
- Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg");
- intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
- startActivityForResult(intent, 1);
- }
- else if (options[item].equals("Choose from Gallery"))
- {
- Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
- startActivityForResult(intent, 2);
- }
- else if (options[item].equals("Cancel")) {
- dialog.dismiss();
- }
- }
- });
- builder.show();
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == RESULT_OK) {
- if (requestCode == 1) {
- File f = new File(Environment.getExternalStorageDirectory().toString());
- for (File temp : f.listFiles()) {
- if (temp.getName().equals("temp.jpg")) {
- f = temp;
- break;
- }
- }
- try {
- Bitmap bitmap;
- BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
- bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(),
- bitmapOptions);
- viewImage.setImageBitmap(bitmap);
- String path = android.os.Environment
- .getExternalStorageDirectory()
- + File.separator
- + "Phoenix" + File.separator + "default";
- f.delete();
- OutputStream outFile = null;
- File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg");
- try {
- outFile = new FileOutputStream(file);
- bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile);
- outFile.flush();
- outFile.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- } else if (requestCode == 2) {
- Uri selectedImage = data.getData();
- String[] filePath = { MediaStore.Images.Media.DATA };
- Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null);
- c.moveToFirst();
- int columnIndex = c.getColumnIndex(filePath[0]);
- String picturePath = c.getString(columnIndex);
- c.close();
- Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath));
- Log.w("path of image from gallery......******************.........", picturePath+"");
- viewImage.setImageBitmap(thumbnail);
- }
- }
- }
- }
In the code above, "AlertDialog" will create a pop-up dialog box that will ask the user to choose "Take Photo", in other words capture an image from the camera or "Choose from Gallery" or "Cancel". Note that in both "Choose from Gallery" and "Take Photo", you can add any code in "startActivityForResult".
Output snapshots
Run the application on an Android phone.
The first screen looks like,
Clicking on the button "Select Photo" you will get the alert dialog box-like,
Selecting "Take photo" will open your camera.
After clicking the photo, you can discard it or save it by selecting the tick mark:
Finally, the image clicked will be displayed in the ImageView.
Selecting "Choose from Gallery" will open your gallery (note that the image captured earlier has been added to the phone gallery).
Selecting an image from these albums will be displayed in the ImageView like:
Summary
In this article, we learned about Capture Image From Camera and Select Image From Gallery of Android Phone Using Android Studio.
Thank you... Enjoy coding :)