Как получить картинку из галереи в android?

Я новичок в Android, и я искал, как получить изображение из галереи, но у меня есть несколько вопросов относительно следующего кода:

static final int REQUEST_IMAGE_GET = 1;

public void selectImage() {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_GET);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) {
        Bitmap thumbnail = data.getParcelable("data");
        Uri fullPhotoUri = data.getData();
        // Do work with photo saved at fullPhotoUri
        ...
    }
}

В этой строке: Bitmap thumbnail = data.getParcelable("data");

Первый: Откуда взялся ключ "data"?

Второй: Зачем использовать Parcelable, почему не использовать HasExtra("data")

В третьих: Зачем нужны вместе растровое изображение и URI? Я понимаю URI, чтобы получить его местоположение, но если у меня есть растровое изображение. В чем важность URI и наоборот

Четвертый: В чем разница между getParcelableExtra() и getParcelable()

Пятый: Когда мне вызвать в onActivityResult?

Вы получаете растровое изображение только с тем намерением, которое используете. (И не так, как вы это делаете.) Нет URL. И вы никогда не вызываете onActivityResult. Он вызывается ОС, если пользователь подтверждает, что сделанный снимок в порядке.

greenapps 01.08.2018 06:37

@greenapps, что вы имеете в виду, говоря «Вы получаете растровое изображение только с тем намерением, которое вы используете». ?

Abdel-Rahman El-Feraly 01.08.2018 13:11

Что вы также не получаете URL-адрес.

greenapps 04.08.2018 16:03
1
3
357
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Так что здесь довольно много вопросов !!!

Самое простое известное мне намерение позволить пользователю выбрать изображение из галереи:

public static final int GALLERY_REQUEST = 1001;

Intent galleryIntent = new Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent , GALLERY_REQUEST );

а затем вы можете получить выбранный пользователем Uri изображения следующим образом:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
   super.onActivityResult(requestCode, resultCode, data);
   if (requestCode == GALLERY_REQUEST && data != null && data.getData() != null){
       //this is the uri of the image use it to load the image 
       Uri imageUri = intent.getData();
   }
}

First: where did "data" key come from?

intent.getData() - это ключ, который Android предоставляет себе для использования выбранного контента (изображения, музыка и ...)

Second: why using Parcelable ,why not using HasExtra("data")

Parcelable - это способ сериализации объекта в Android от одного процесса к другому. в основном, когда вы вызываете намерение и хотите передать некоторый объект данных, этот объект должен реализовывать интерфейс Parcelebale. поэтому на объекте намерения вы можете проверить, есть ли у намерения дополнительный объект с именем ключа объекта и с помощью метода intent.hasExtra("keyname"). когда вы хотите получить объект Parcelable из Intent, вы можете просто использовать getParcelableExtra("keyname") в намерении или вы можете получить все дополнительные функции этого намерения, используя getExtra(), который возвращает пакет, а затем в пакете вы можете вызвать getParcelable("keyname"), чтобы получить тот же объект Parcelable

Third: what is the purpose of having a bitmap and a URI together? i understand the URI to get its location,but if i have it's bitmap ..whats the importance of the URI and vice versa

android не предоставит вам растровое изображение только Uri. вы решите, что делать с этим URI: либо загрузить из него растровое изображение, либо создать файл.

Fifth: when do i call onActivityResult?

когда когда-либо вы начинаете действие (в основном, используя startActivityForResult(intent)) и ожидаете от него некоторого результата, например: вызывая галерею, и вы хотите, чтобы активность галереи возвращала вам изображение, вы должны реализовать метод onActivityResult, чтобы Android мог вызвать его и предоставить вам запрошенный результат (если есть)

Надеюсь, поможет счастливое кодирование

«Android не предоставит вам растровое изображение только Uri», поэтому эта строка «Bitmap thumbnail = data.getParcelable (« data »);» бесполезно?

Abdel-Rahman El-Feraly 01.08.2018 13:15

Другие вопросы по теме