2024년 12월 25일 수요일

Unity data 파일 저장 그리고 권한

GPT에게 낚인 몇 시간의 삽질...

Unity에서 파일 저장하려고 하는데 생각보다 잘안되서 gpt의 도움을 받아서 작업중이었습니다.

문제는 android 단말에 파일을 저장하고 싶은데 저장이 생각만큼 안되는것이었습니다. (save데이터라서 외부로 꺼낼때 자유로와야 했기 때문에 여러 앱에서 사용 가능한 공용 폴더를 고려하였습니다.)

저의 경우 아래 권한이 말썽이었는데요.


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


넣고 단말 디버깅도 해봤지만 잘동작하지 않았습니다.

결론만 정리하자면 GPT에게 문의시 Android의 경우 API 버전에 따라 권한 관련 변경점이 많으므로 API버전을 꼭 명시해서 문의를 하시기 바랍니다.

생각해보면 파일 읽기 권한이라는 것이 나의 사진이니 영상에도 접근 가능하다는 것인데 함부로 막 허용해주면 안되겠죠.

그래서 WRITE_EXTERNAL_STORAGE 권한이 더 이상 사용 불가가 되었고 READ_MEDIA_* 권한으로 파일 접근을 세분화 되었다고 합니다.

권한을 따로 요청하지 않아도 접근 가능한 영역에 저장하는 것을 고려하는 것이 좋을 것 같아서 저는 파일을 다운로드 받는 곳에 저장 했습니다. 

권한이 추가로 필요하지 않습니다.

위치는 다음과 같습니다.

            using (AndroidJavaClass environment = new AndroidJavaClass("android.os.Environment"))

            using (AndroidJavaObject downloadsDirectory = environment.CallStatic<AndroidJavaObject>("getExternalStoragePublicDirectory", environment.GetStatic<string>("DIRECTORY_DOWNLOADS")))

            {

                string downloadsPath = downloadsDirectory.Call<string>("getAbsolutePath");

                string fullPath = Path.Combine(downloadsPath, fileName);

                Debug.Log($"File saved at: {fullPath}");

            }


삼성 휴대폰 기준

경로가 /storage/emulated/0/Download/ 위치가 되는데 내파일 앱으로 확인시 내장 저장 공간 바로 아래/Download 폴더에 들어가게 됩니다.




댓글 없음:

댓글 쓰기