본문 바로가기
Android

[안드로이드] 외부저장소DCIM 경로 가져오기 및 파일 생성

by 워뇨옹2 2021. 9. 22.
728x90
반응형
private fun makeDirectory(isHideOn: Boolean, dirName: String) {
        val mkName = if (isHideOn) ".$dirName" else dirName

        val path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString() + 
          File.separator + 
          APP_NAME + 
          File.separator + 
          mkName
        val file = File(path)
        if (!file.mkdirs()) {
            Toast.makeText(this, "폴더생성 에러", Toast.LENGTH_SHORT).show()
        } else {
            Toast.makeText(this, "폴더생성 완료", Toast.LENGTH_SHORT).show()
        }
    }

현재 만들고 있는 앱에서 사용하는 폴더 생성 및 외부저장소DCIM 경로다.

Environment.getExternalStoragePublicDirectory(type: String) 으로 type 부분에 DCIM을 넣어준거다.

type에 다른 경로를 넣어주면 그 경로에 알맞게 접근 가능하다. (ex DOWNLOAD, PICTURES, DOCUMENTS....)

 

그리고 해당 경로를 통해 File 객체를 만들어주고 mkdirs로 mkName이라는 폴더를 생성했다.

 

정상적으로 작동하는 것을 확인하긴 했지만, getExternalStoragePublicDirectory()가 Deprecated 상태다...

 

그리고 안드로이드 스튜디오에서 제안하는 다른 방법은

val path = this.getExternalFilesDir(Environment.DIRECTORY_DCIM).toString() + 
    File.separator + 
    APP_NAME + 
    File.separator + 
    mkName

이처럼 context.getExternalFilesDir을 사용하는 방식이다.

하지만 절대경로가 나오는게 아니라 해당 앱의 패키지명에 따라 DCIM 경로가 다르게 나온다.....

어떤 방식으로 경로를 출력하는건지 모르겠다.

 

어쨋든 이걸로 절대경로를 알 수 있다면 액티비티나 프래그먼트 단에서 사용하기에는 문제가 없어보이는데, 뷰모델에서 접근하고 싶다면 사용할 수 가 없다. AndroidViewModel을 사용하면 context를 얻을 수는 있지만, 올바른 접근법일지..

 

애초에 뷰모델에서 외부저장소 경로에 접근하려는 생각 자체가 잘못된것은 아닐까. 라는 생각도 해본다.

728x90
반응형