Как получить изображение из галереи в 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");

Во-первых: откуда взялся ключ "данные"?

Во-вторых: Почему стоит использовать Parcelable, а почему бы не использовать HasExtra("data")

Третье. Какова цель совместного использования растрового изображения и URI? Я понимаю URI, чтобы получить его местоположение, но если у меня есть растровое изображение. Какова важность URI и наоборот

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

Пятое: когда мне звонить onActivityResult?


person Abdel-Rahman El-Feraly    schedule 01.08.2018    source источник
comment
Вы получаете растровое изображение только с тем намерением, которое используете. (И не так, как вы это делаете.) Нет URL. И вы никогда не вызываете onActivityResult. Это вызывается ОС, если пользователь подтверждает, что сделанное изображение в порядке.   -  person greenapps    schedule 01.08.2018
comment
@greenapps, что вы имеете в виду? Вы получаете растровое изображение только с тем намерением, которое вы используете. ?   -  person Abdel-Rahman El-Feraly    schedule 01.08.2018
comment
Что вы также не получите URL-адрес.   -  person greenapps    schedule 04.08.2018


Ответы (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();
   }
}

Во-первых: откуда взялся ключ «данные»?

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

Во-вторых: зачем использовать Parcelable, почему бы не использовать HasExtra («данные»)

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

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

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

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

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

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

person seyed Jafari    schedule 01.08.2018
comment
Android не даст вам растровое изображение только Uri, поэтому эта строка Bitmap thumbnail = data.getParcelable(data); бесполезно? - person Abdel-Rahman El-Feraly; 01.08.2018