Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Wook No.1

Storage Image 저장 본문

Android

Storage Image 저장

Wook No.1 2021. 10. 7. 13:53

내부 저장소

  1. getFilesDir() : 앱과 고유하게 연결된 파일 시스템의 디렉토리를 표시하는 File 개체를 반환
  2. getDir(name, mode) : 앱의 고유한 파일 시스템 디렉토리 내에 새 디렉토리를 생성하거나 기존 디렉토리 오픈
  3. getCacheDir() : 앱과 고유하게 연결된 파일 시스템의 캐시 디렉토리를 표시하는 File 개체를 반환 (이 디렉토리를 임시파일용으로 정기적으로 지워야하고, 디스크 공간이 부족해지면 시스템에서 알아서 삭제함)
private fun saveInternalStorage(context: Context, fileName: String, bitmap: Bitmap) {
    val INTERNAL_STORAGE_IMAGE_FOLDER = "imgDIr"
    val storageDir = context.getDir(INTERNAL_STORAGE_IMAGE_FOLDER, Context.MODE_PRIVATE)
    
    val imgFile = File(storageDir, fileName + ".jpg")

    val fileOutputStream = FileOutputStream(imgFile.absoluteFile)
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream)
    fileOutputStream.close()
}

 

 

외부 저장소

  1. Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) : 공개 디렉토리 
  2. getExternalFilesDir(Environment.DIRECTORY_PICTURES) : 비공개 디렉토리

android 10 이상부터는 MediaStore와 contextResolver를 이용해서 공개 외부 저장소 저장할 수 있게 되었다. 

private fun saveImageToStorage(context: Context, bitmap: Bitmap, fileName: String) {
    val imageOutStream = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        val values = ContentValues()
        values.put(MediaStore.Images.Media.DISPLAY_NAME, fileName)
        values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
        values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES)
        val uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
        uri?.let {
            contentResolver.openOutputStream(it)
        }
    } else {
        val imagesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)?.absolutePath
        val imageFile = File(imagesDir, fileName)
        val outputStream = FileOutputStream(imageFile)
        MediaScannerConnection.scanFile(context, arrayOf(imageFile.absolutePath), null, null);
        outputStream
    }
     imageOutStream.use { imageOutStream ->
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, imageOutStream)
    }
}
Comments