Tutorials Android Image Picker Using Intent.ACTION_PICK in Android

Image Picker Using Intent.ACTION_PICK in Android

Android supports seamless integration of applications and content providers. Lot many things are handy provided to developers, which helps in reducing the code and consumes less time to integrate different features to app.

For example, if we have an application that allow user to change his profile picture. In this requirement user will be welling to browse his mobile gallery and pick a picture of his own to set his profile picture. Integrating this feature in traditional operating system, need lot of effort write code to integrate file browser. But in android we can use Intent.ACTION_PICK action to get this feature integrated in not more than five minutes.

What is intent in android?

Intent is an abstract description of an operation to be performed. It can be used with startActivity to launch an Activity, broadcastIntent to send it to any interested BroadcastReceiver components, and startService(Intent) or bindService(Intent, ServiceConnection, int) to communicate with a background Service.

Intent provides a facility for performing late run-time binding between the codes in different applications. Its most significant use is in the launching of activities, where it can be thought of as the glue between activities. It is basically a passive data structure holding an abstract description of an action to be performed.

Writing image picker using Intent.ACTION_PICK in android

Intent.ACTION_PICK action is in buit in android and helps to pick an image item from a data source. We just need to provide the URI of the provider. Almost all core android applications (eg. Messaging, Gallery, Contacts etc) provide this facility. All you need is to set the intent action and the data.

action – tells what to perform, such as ACTION_VIEW, ACTION_EDIT, ACTION_MAIN, etc.
data– data needed to operate the action. It is expressed as uri. Example such as a person record in the contacts database. Some examples of action/data pairs are:

ACTION_VIEW content://contacts/people/1 — Display information about the person whose identifier is “1”.
ACTION_DIAL content://contacts/people/1 — Display the phone dialer with the person filled in.
ACTION_VIEW tel:123 — Display the phone dialer with the given number filled in. Note how the VIEW action does what what is considered the most reasonable thing for a particular URI.
ACTION_DIAL tel:123 — Display the phone dialer with the given number filled in.

There are also some more additional attributes. Visit the below llink for more details

http://developer.android.com/reference/android/content/Intent.html

Creating layout Code Snippet

As you can see in the screenshot below, my example is using simple LinearLayout with a ImageView and a button aligned to vertical orientation. You may have some complex layout as per your needs.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context=".ImagePickerActivity" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:maxHeight="200dp"
        android:src="@drawable/ic_launcher" />

    <Button
        android:id="@+id/btn_pick"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="20dp"
        android:text="@string/change_image" />

</LinearLayout>

Activity class Code Snippet

Below is my activity class using Intent.ACTION_PICK action

package com.javatechig.filepicker;

import java.io.FileNotFoundException;
import java.io.InputStream;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class ImagePickerActivity extends Activity {

	private final int SELECT_PHOTO = 1;
	private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_picker);

        imageView = (ImageView)findViewById(R.id.imageView);

        Button pickImage = (Button) findViewById(R.id.btn_pick);
        pickImage.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View view) {				
				Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
				photoPickerIntent.setType("image/*");
				startActivityForResult(photoPickerIntent, SELECT_PHOTO);
			}
		});
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
        super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

        switch(requestCode) { 
        case SELECT_PHOTO:
            if(resultCode == RESULT_OK){
				try {
					final Uri imageUri = imageReturnedIntent.getData();
					final InputStream imageStream = getContentResolver().openInputStream(imageUri);
					final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
					imageView.setImageBitmap(selectedImage);
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				}

            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return true;
    }    
}

As you can see the code snippet used is pretty simple. Here in this example, I am handling button click event and their Image picker using Intent.ACTION_PICK has been called. setType() method is used to define the file filter criteria. This will invoke the default gallery and user will be able to select an image.

Once image is selected, the result will be back to our main activity, and the result will be returned to onActivityResult() method. Here we are receiving the selected image Uri. Once we have the uri, we can convert them to Bitmap and then display it on ImageView. Below coded snippet is used to get the image from the Uri and convert into bitmap.

InputStream imageStream = getContentResolver().openInputStream(imageUri);
Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);

And now we are done.

Output of the above code is below

image picker example in anroid

Total
0
Shares
guest
12 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Sergey
Sergey
8 years ago

Works for me! Thanks dude!

Harshit
Harshit
7 years ago

Can you please add something to pick multiple images from the gallery?

Mohabh
Mohabh
7 years ago

BIG Thanks

JavaTechig
JavaTechig
7 years ago

Below snippet should help

Intent intent = new Intent();
intent.setType(“image/*”);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,”Select Picture”), 1);

Rafiq
Rafiq
7 years ago
Reply to  JavaTechig

what if i want to add a limit like select multiple images but to a limit like 8

sdk1123
sdk1123
7 years ago

works like a charm. Thanks !

Falahgs
Falahgs
7 years ago

Thank foe great Tutorial.

madhubala
madhubala
6 years ago

I want to retrieve the image in new activity …what shld i do?

Manish kumar
Manish kumar
6 years ago

Hi images are coming …but it is not saving.What i have to do.

ben
ben
5 years ago
Reply to  Manish kumar

have you found the answer to this? i am also looking

hiruhp
hiruhp
6 years ago

pls show me the code of String cod

keerthanaR
keerthanaR
4 years ago

i am new to the android, can anyone explain the below code:
already case is receiving the cmd from SELECT_PHOTO: , then why we are using if case?
what will be in (int requestCode, int resultCode, Intent imageReturnedIntent) ;
what this will do?
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

please explain step by step , it will great helpful for me to understand.
thanks in advance

prg coding:

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

switch(requestCode) {
case SELECT_PHOTO:
if(resultCode == RESULT_OK){
try {
final Uri imageUri = imageReturnedIntent.getData();
final InputStream imageStream = getContentResolver().openInputStream(imageUri);
final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
imageView.setImageBitmap(selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}

}
}
}

Previous Post
Blackberry Tutorials

Custom Image ButtonField in Blackberry

Next Post
Android Tutorials

Android Dialog Example

Related Posts
By clicking “Allow All”, you agree to the storing of cookies on your device to enhance site navigation, analyze site usage, and assist in our marketing efforts. Cookie Notice
Allow All
12
0
Would love your thoughts, please comment.x
()
x