Я новичок в 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?
@greenapps, что вы имеете в виду, говоря «Вы получаете растровое изображение только с тем намерением, которое вы используете». ?
Что вы также не получаете URL-адрес.
Так что здесь довольно много вопросов !!!
Самое простое известное мне намерение позволить пользователю выбрать изображение из галереи:
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 »);» бесполезно?
Вы получаете растровое изображение только с тем намерением, которое используете. (И не так, как вы это делаете.) Нет URL. И вы никогда не вызываете onActivityResult. Он вызывается ОС, если пользователь подтверждает, что сделанный снимок в порядке.