Выбираем изображение из галереи с помощью Intent.ACTION_PICK
Главная » Выбираем изображение из галереи с помощью Intent.ACTION_PICK

Во многих приложениях часто встречается потребность выбрать некоторое изображение или фото, например, для настройки своего профиля или аккаунта в Android приложении. Самым простым решением для реализации этой функции приложения является вызов стандартного приложения галереи и выбор изображения оттуда. Сегодня мы научимся интегрировать эту функцию в свое Android приложение.

Чтобы вызвать стандартную галерею и получить из нее изображение в свое приложение, необходимо использовать Intent.ACTION_PICK. Это действие встроено в стандартные возможности Android и помогает делать выбор изображения из имеющихся на устройстве. Нам всего лишь нужно получить данные об изображении, а точнее его URI, которую мы потом преобразуем в Bitmap объект и отобразим в обычном ImageView. 

Начнем. Создадим новое приложение, выбираем Blank Activity, минимальная версия Android 2.2+. Для начало создадим интерфейс своего приложения. Открываем файл activity_main.xml и добавляем в него элементы ImageView и Button:

<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:maxHeight="200dp"
 android:layout_gravity="center"
 android:src="@drawable/ic_launcher" />

 <Button
 android:id="@+id/button"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:layout_gravity="center"
 android:layout_marginTop="20dp"
 android:text="Выбрать изображение" />
</LinearLayout>

Кнопка Button нужна для того, чтобы вызвать стандартную галерею, а в элементе ImageView будет отображаться выбранное изображение. 

Теперь перейдем к работе с кодом. Как уже упоминалось в начале, мы создадим Intent намерение для открытия галереи (Intent.ACTION_PICK), которое будет запускаться при нажатии на кнопку Buton, далее после выбора пользователем изображения с галереи мы получаем ее URI ссылку и преобразуем ее в объект Bitmap, а далее отображаем полученное изображение в элементе ImageView. Открываем файл MainActivity.java и добавляем туда следующий код:

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 MainActivity extends Activity {

 //Объявляем используемые переменные:
 private ImageView imageView;
 private final int Pick_image = 1;


 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 
 //Связываемся с нашим ImageView:
 imageView = (ImageView)findViewById(R.id.imageView);

 //Связываемся с нашей кнопкой Button:
 Button PickImage = (Button) findViewById(R.id.button);
 //Настраиваем для нее обработчик нажатий OnClickListener:
 PickImage.setOnClickListener(new OnClickListener() {

 @Override
 public void onClick(View view) {
 
 //Вызываем стандартную галерею для выбора изображения с помощью Intent.ACTION_PICK:
 Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
 //Тип получаемых объектов - image:
 photoPickerIntent.setType("image/*");
 //Запускаем переход с ожиданием обратного результата в виде информации об изображении:
 startActivityForResult(photoPickerIntent, Pick_image);
 }
 });
 }

 //Обрабатываем результат выбора в галерее:
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
 super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

 switch(requestCode) {
 case Pick_image:
 if(resultCode == RESULT_OK){
 try {
 
 //Получаем URI изображения, преобразуем его в Bitmap 
 //объект и отображаем в элементе ImageView нашего интерфейса:
 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();
 }
 }
}}}

Запускаем приложение и проверяем работоспособность выбора изображений с галереи:

Выбираем изображение с стандартной галереи

Категория: Уроки программирования | Просмотров: 1303 | Добавил: Oleg | Теги: Intent, изображения, работа с галереей, Intent.ACTION_PICK | Рейтинг: 0.0/0
Всего комментариев: 1
avatar
1 dasha-titova-88 • 17:09, 28.09.2015
Нужно дать разрешение на Uri, для данной операции. Или полностью разрешить считывания с галереи, иначе будет вылетать. Можно сделать разными путями. Самый простой но не очень безопасный это в манифесте пишем:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
avatar