#java #android #android-studio
#java #Android #android-studio
Вопрос:
у меня есть приложение, в котором пользователь должен иметь возможность выбирать несколько изображений из своей галереи и отправлять их, все работает нормально, за исключением случаев, когда пользователь решает, что хочет отправить только одно изображение, изображение не извлекается в методе onActivtyResult вот мой код, запускающий намерение выбрать изображение
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, PICK_IMG);
//PICK_IMG=1
мой результат работы
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
System.out.println("step 1");
if (requestCode == PICK_IMG) {
System.out.println("step 2");
if (resultCode == RESULT_OK) {
System.out.println("step 3");
if (data.getClipData() != null) {
System.out.println("step 4");
int count = data.getClipData().getItemCount();
int CurrentImageSelect = 0;
while (CurrentImageSelect < count) {
Uri imageuri = data.getClipData().getItemAt(CurrentImageSelect).getUri();
ImageList.add(imageuri);
CurrentImageSelect = CurrentImageSelect 1;
}
}
}
}
}
при выборе нескольких изображений он работает отлично, но при выборе только одного изображения он достигает шага 3, после чего data.getClipData() возвращает значение null
Ответ №1:
Когда вы выбираете одно изображение, оно не возвращается, data.getClipData()
вместо этого Android устанавливает его в data
часть data.getData()
, которая является Uri
. Вы можете сделать это, как показано ниже.
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
System.out.println("step 1");
if (requestCode == PICK_IMG) {
System.out.println("step 2");
if (resultCode == RESULT_OK) {
System.out.println("step 3");
if (data.getClipData() != null) {
System.out.println("step 4");
int count = data.getClipData().getItemCount();
int CurrentImageSelect = 0;
while (CurrentImageSelect < count) {
Uri imageuri = data.getClipData().getItemAt(CurrentImageSelect).getUri();
ImageList.add(imageuri);
CurrentImageSelect = CurrentImageSelect 1;
}
}
else {
Uri uri = data.getData();
if (uri != null) {
//uri of the single image
}
}
}
}
}