Wook No.1
Storage Image 저장 본문
내부 저장소
- getFilesDir() : 앱과 고유하게 연결된 파일 시스템의 디렉토리를 표시하는 File 개체를 반환
- getDir(name, mode) : 앱의 고유한 파일 시스템 디렉토리 내에 새 디렉토리를 생성하거나 기존 디렉토리 오픈
- 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()
}
외부 저장소
- Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) : 공개 디렉토리
- 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)
}
}
'Android' 카테고리의 다른 글
androidx.core:core-ktx:1.6.0 이슈 (0) | 2022.02.03 |
---|---|
Installed Build Tools revision 31.0.0 is corrupted. (0) | 2022.02.03 |
안드로이드 App Bundle 빌드(.aab) 파일명 변경 (0) | 2021.08.24 |
안드로이드 풀스크린에서 키보드 겹치는 이슈 (0) | 2021.06.30 |
기존 XML Layout을 data binding Layout으로 Convert (0) | 2021.06.28 |
Comments