마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

(고수님들 도와주세요,,)dialog에서 앨범을 열어 사진을 고르지 않고 뒤로 가기 버튼을 누르면 앱이 중지됩니다.

0 추천

dialog에서 앨범을 열어 사진을 고르지 않고 뒤로 가기 버튼을 누르면 앱이 중지됩니다.

 

사진과 같이 dialog를 설정해놓았는데 카메라와 앨범 모두 사진을 선택하지 않고 뒤로 가기 버튼을 누르면 앱이 중지됩니다.

 

앨범까지는 들어가지고 앨범에서 사진을 선택하면 사진도 교육할 사진 부분에 잘 들어가지는데 

앨범에서 아무것도 선택하지 않고 오른쪽 하단의 뒤로 가기 버튼을 누르면 앱이 중지됩니다 라는 오류가 뜹니다..

 

public class ImagePro {

    public static String TAG = "ImagePro";
    Activity activity;
    Uri mImageCaptureUri;
    public static int CAMERA_CODE = 64;
    public static int GALLERY_CODE = 74;
    public static int CROPPING_CODE = 84;
    private final static int REQUEST_PERMISSION_REQ_CODE = 704;

    public ImagePro(Activity activity) {

        this.activity = activity;

        if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION_REQ_CODE);
        }
    }

    public ImageDetails getImagePath(int requestCode, int resultCode, Intent intent) {

        ImageDetails imageDetails = new ImageDetails();
        if(resultCode == Activity.RESULT_OK) {

            if(requestCode == CAMERA_CODE) {
                imageDetails.setUri(mImageCaptureUri);
                imageDetails.setPath(mImageCaptureUri.getPath());
                Bitmap bitmap = null;

                try {
                    bitmap = MediaStore.Images.Media.getBitmap(activity.getContentResolver(), mImageCaptureUri);

                    ExifInterface exif = new ExifInterface(mImageCaptureUri.getPath());

                    Log.d(" ### ",exif.toString());
                    int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);

                } catch (IOException e) {
                    e.printStackTrace();
                }
                imageDetails.setBitmap(bitmap);
                imageDetails.setFile(new File(mImageCaptureUri.getPath()));

            } else if(requestCode == GALLERY_CODE) {

                Uri uri = intent.getData();
                imageDetails.setUri(uri);
                Bitmap bitmap = null;

                try {
                    bitmap = MediaStore.Images.Media.getBitmap(activity.getContentResolver(), uri);

                    ExifInterface exif = new ExifInterface(getRealPathFromURI(activity,uri));

                } catch (IOException e) {
                    e.printStackTrace();
                }
                imageDetails.setBitmap(bitmap);
                imageDetails.setFile(new File(getRealPathFromURI(activity,uri) ));
                imageDetails.setPath(getRealPathFromURI(activity,uri));

            } else if(requestCode == CROPPING_CODE) {
                try {
                    if(outPutFile.exists()){
                        imageDetails.setUri(FileProvider.getUriForFile(activity, "com.example.user.myapplication.fileprovider", outPutFile));//바꾼코드
                        imageDetails.setFile(outPutFile);
                        imageDetails.setPath(outPutFile.getPath());
                        Bitmap photo = decodeFile(outPutFile);


                        imageDetails.setBitmap(photo);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

        }
        return imageDetails;
    }
    public String getRealPathFromURI(Context context, Uri contentUri) {
        Cursor cursor = null;
        try {
            String[] proj = { MediaStore.Images.Media.DATA };
            cursor = context.getContentResolver().query(contentUri,  proj, null, null, null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }
    }


    /**
     * Open image pick dialog.<br/>
     * CAMERA_CODE</br>
     * GALLERY_CODE
     */
    public void openImagePickOption() {

        final CharSequence[] items = { "사진 찍기", "앨범에서 사진선택", "취소" };

        AlertDialog.Builder builder = new AlertDialog.Builder(activity);
        builder.setTitle("사진 선택");
        builder.setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int item) {

                if (items[item].equals("사진 찍기")) {

                    captureImage();

                } else if (items[item].equals("앨범에서 사진선택")) {

                    pickImage();

                } else if (items[item].equals("취소")) {
                    dialog.dismiss();
                }
            }
        });
        builder.show();
    }

    /**
     * decode from file to bitmap
     * @param f file
     * @return Bitmap data
     */
    private Bitmap decodeFile(File f) {
        try {
            // decode image size
            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(new FileInputStream(f), null, o);

            // Find the correct scale value. It should be the power of 2.
            final int REQUIRED_SIZE = 512;
            int width_tmp = o.outWidth, height_tmp = o.outHeight;
            int scale = 1;
            while (true) {
                if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE)
                    break;
                width_tmp /= 2;
                height_tmp /= 2;
                scale *= 2;
            }

            // decode with inSampleSize
            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize = scale;
            return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
        } catch (FileNotFoundException e) {

//            Log(e.getMessage());
        }
        return null;
    }

    /**
     * Capture image using camera <br/>
     * REQUEST_CODE = ImagePro.CAMERA_CODE
     */
    public void captureImage() {
        if(activity != null) {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss", Locale.KOREA);
            Date date = new Date();
            String currentDate = formatter.format(date);

            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            File f = new File(android.os.Environment.getExternalStorageDirectory(), currentDate+".jpg");
            mImageCaptureUri = FileProvider.getUriForFile(activity,"com.example.user.myapplication.fileprovider", f);// Change
            Log.i("%%%%%%", f.toString());
            intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
            activity.startActivityForResult(intent, CAMERA_CODE);
        } else {
        }
    }

    /** * pick image from gallery */
    public void pickImage() {
        Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        activity.startActivityForResult(i, GALLERY_CODE);
        i.setType("image/*");
        i.setAction(Intent.ACTION_GET_CONTENT);

    }

고수님들 제발 도와주세요,, 어느 부분의 문제인지도 감이 안 잡히는 초보입니다..

마음나무 (240 포인트) 님이 2019년 10월 2일 질문

1개의 답변

0 추천

if(resultCode == RESULT_OK) :

이거 쓰니까 에러 안나네요

아래 링크 참조하세요 :)

 

https://stackoverflow.com/questions/26115623/app-crashes-when-going-back-from-gallery-without-selecting-any-image

수현e (140 포인트) 님이 2021년 4월 5일 답변
...