Android PhotoPicker using Intents and Gallery

Android PhotoPicker using Intents and Gallery

Sometimes you need to select a photo. To make it convenient for the user, you should search all the images on the device, generate thumbnails, create a touch&go interface, and a lot more details, that take some considerable time to implement. Luckily we can use the default Android Gallery instead, and invoke it from withing our application:

The code to achieve this is very easy and straightforward. For the demo app, I’ve created a LinearLayout that holds a TextView (for displaying messages) a Button (to select the image) and an ImageView (to display the image selected). Pressing the button, invokes the Gallery intent, for ACTION_PICK / image picking.

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, idIntentID);

We start this intent using startActivityForResult, passing the idIntentID variable. We also need to make sure the main class overrides onActivityResult. By doing so, we will receive a notification when the user has chosen a picture or has canceled the Photo picker:

	  @Override
	  protected void onActivityResult(int requestCode, int resultcode, Intent intent)
	  {
		  super.onActivityResult(requestCode, resultcode, intent);
		  if (requestCode == idIntentID) {
			  if (intent != null) {
				  Log.d(LOG_TAG, "idButSelPic Photopicker: " + intent.getDataString());
				  Cursor cursor = getContentResolver().query(intent.getData(), null, null, null, null);
				  cursor.moveToFirst();  //if not doing this, 01-22 19:17:04.564: ERROR/AndroidRuntime(26264): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
				  int idx = cursor.getColumnIndex(ImageColumns.DATA);
				  String fileSrc = cursor.getString(idx); 
				  Log.d(LOG_TAG, "Picture:" + fileSrc);
				  m_Tv.setText("Image selected:"+fileSrc);
				  
				  Bitmap bitmapPreview = BitmapFactory.decodeFile(fileSrc); //load preview image
				  BitmapDrawable bmpDrawable = new BitmapDrawable(bitmapPreview);
				  m_Image.setBackgroundDrawable(bmpDrawable);
			  }
			  else {
				  Log.d(LOG_TAG, "idButSelPic Photopicker canceled");
				  m_Tv.setText("Image selection canceled!");
			  }
		  }
	  }

It’s easy, but very useful for many applications. Here is the sample project code:
PhotoPicker

2 Comments

  1. Rasa Rahul

    in the above example it displays all the images present in the phone instead is tehre any way to display images from particular directory????

  2. Divya

    Thanks a lot.It really helped me,but I m getting a problem with this.
    When i add new image in sdcard,it doesnt show that in the photopicker.

Leave a Reply