본문 바로가기
Android

파일 저장하는 함수

by xavi2019 2021. 9. 20.

공용공간 및 사설공간에 각각 저장하는 함수

 

    //
    // 파일 저장 하는 함수
    //
    private Uri saveImage(Bitmap bitmap, @NonNull String name, @NonNull String folder, boolean inAppFolder) throws IOException {
        boolean saved;
        OutputStream fos;
        Uri imageUri;

        // inAppFolder 는 /Android/data/앱패키지명/files 폴더에 위치
        // 파일 명이 같을 경우 덮어쓰기로 됨
        if(inAppFolder) {
            File image = new File(getActivity().getExternalFilesDir(null), name);
            fos = new FileOutputStream(image);
            imageUri = Uri.fromFile(image);
        } else {
            // 공용공간에 저장, DCIM의 folder에
            // 파일명이 같을 경우 (1) (2)로 넘버링 됨
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                ContentResolver resolver = getContext().getContentResolver();
                ContentValues contentValues = new ContentValues();
                contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
                contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpg");
                contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, "DCIM/" + folder);
                imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
                fos = resolver.openOutputStream(imageUri);
            } else {
                String imagesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString() + File.separator + folder;

                File file = new File(imagesDir);
                if (!file.exists()) {
                    file.mkdir();
                }

                File image = new File(imagesDir, name + ".jpg");
                fos = new FileOutputStream(image);
                imageUri = Uri.fromFile(image);
            }
        }

        saved = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
        if(saved) {
            fos.flush();
            fos.close();
            return imageUri;
        }
        return null;
    }

 

댓글