Невозможно выбрать только одно изображение при использовании режима выбора нескольких изображений

#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
                    }
                }
            }

            }

        }