안드로이드 갤러리에서 여러 이미지를 개별적으로 선택하는 방법

2020-08-01 android

내가 달성하고자하는 것은 별도의 Imageview를 클릭 할 때마다 sperate 이미지를 선택하는 것입니다. 예를 들어 ImageView_1을 클릭하면 갤러리에서 하나의 이미지를 선택할 수 있고 Imagview_2를 클릭하면 갤러리에서 별도의 이미지를 선택할 수 있습니다. 나는 이미이 질문에 대한 많은 답변이 있음을 보았지만 모두 내가하고 싶은 것과 다릅니다. 이전 답변에서는 OnActivity Results의 목록으로 모든 이미지를 가져오고 모든 이미지는 갤러리에서 한 번에 선택됩니다.

내 코드

사용 된 종속성

구현 'com.theartofdev.edmodo : android-image-cropper : 2.8. +'

 private void ImageOnclick(){
    
            image_profile.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (ContextCompat.checkSelfPermission(Upload_New_Product.this,
                            Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
                        openFileChooser();
                    } else {
                        requestStoragePermission();
                    }
                }
            });
    
            image_profile2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    if (ContextCompat.checkSelfPermission(Upload_New_Product.this,
                            Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
                        openFileChooser2();
                    } else {
                        requestStoragePermission();
                    }
    
                }
            });
    
    
    
        }
    
        private void openFileChooser() {
    
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_GET_CONTENT);
            intent.setType("image/*");
            startActivityForResult(intent, PICK_IMAGE_REQUEST);
    
    
        }
    
        private void openFileChooser2() {
    
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_GET_CONTENT);
            intent.setType("image/*");
            startActivityForResult(intent, PICK_IMAGE_REQUEST2);
    
        }
    
        @RequiresApi(api = Build.VERSION_CODES.P)
        @Override
        protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
    
            if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null) {
                ImageUri = data.getData();
    
                CropImage.activity(ImageUri)
                        .setGuidelines(CropImageView.Guidelines.ON)
                        //         .setAspectRatio(1, 1)
                        .start(this);
    
            } else if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
    
                CropImage.ActivityResult result = CropImage.getActivityResult(data);
                if (resultCode == RESULT_OK) {
                    resultUri = result.getUri();
                    if (Build.VERSION.SDK_INT >= 29) {
                        try {
                            bitmap = ImageDecoder.decodeBitmap(ImageDecoder.createSource(getContentResolver(), resultUri));
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    } else {
                        // Use older version
                        try {
                            bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), resultUri);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                
                    //setImage_profile();
                    resized = Bitmap.createScaledBitmap(bitmap, 600, 600, true);
                    image_profile.setImageBitmap(resized);
                
                } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
                    Exception error = result.getError();
                }
    
            }
    
    
            //  UploadingImage();
            //  UploadingThumbnailImage();
    
    
    
            if (requestCode == PICK_IMAGE_REQUEST2 && resultCode == RESULT_OK && data != null) {
                ImageUri2 = data.getData();
    
                CropImage.activity(ImageUri2)
                        .setGuidelines(CropImageView.Guidelines.ON)
                        //         .setAspectRatio(1, 1)
                        .start(this);
    
            } else if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
    
                CropImage.ActivityResult result = CropImage.getActivityResult(data);
    
                if (resultCode == RESULT_OK) {
                    resultUri2 = result.getUri();
    
    
                    if (Build.VERSION.SDK_INT >= 29) {
                        try {
                            bitmap2 = ImageDecoder.decodeBitmap(ImageDecoder.createSource(getContentResolver(), resultUri2));
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    } else {
                        // Use older version
                        try {
                            bitmap2 = MediaStore.Images.Media.getBitmap(this.getContentResolver(), resultUri2);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
    
                    resized2 = Bitmap.createScaledBitmap(bitmap2, 600, 600, true);
                    image_profile2.setImageBitmap(resized2);
                    //setImage_profile2();
                    //  UploadingImage();
    
                } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
                    Exception error = result.getError();
                }
    
            }
    }

Answers

이 줄을 놓쳤다 :

intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

그리고 활동 결과는 다음과 같아야합니다.

   @Override
   public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == PICK_IMAGE_REQUEST) {
            if(resultCode == Activity.RESULT_OK) {
                if(data.getClipData() != null) {
                    int count = data.getClipData().getItemCount();

                    for(int i = 0; i < count; i++)
                    Uri imageUri = data.getClipData().getItemAt(i).getUri();
                    //TODO: do something; here is your selected images
                }
            } else if(data.getData() != null) {
                String imagePath = data.getData().getPath();
                //TODO: do something
            }
        }
    }

의지:

       Intent intent = new Intent();
       intent.setType("image/*");
       intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
       intent.setAction(Intent.ACTION_GET_CONTENT);
       startActivityForResult(Intent.createChooser(intent,"Select images"), PICK_IMAGE_REQUEST);

Related