Android 6.0으로 업데이트 하면서 없엘 수 있는 권한을 최대한 없에고 있다.

그 중 스토리지 사용 관련 권한을 좀 찾아봤는데, 크게 아래와 같이 나눌 수 있다.


분류

 get method

permission 

path 

auto clean*

앱삭제시폴더삭제

외부 앱에서의 접근 **

기타 
앱 내부 캐시context.getCacheDir()

no need

/data/user/유져번호/패키지명/cache/

디바이스 용량이 부족 한 경우 os가 정리

O

NO

 

앱 내부 파일

context.getFilesDir()

no need

/data/user/유져번호/패키지명/files/

-

O

NO

 
앱 외부 캐시context.getExternalCacheDir()

WRITE_EXTERNAL_STORAGE

*KITKAT(API19) 부터는 권한 필요 없음

 /storage/sdcard/Android/data/패키지명/cache

JELLY_BEAN_MR1 (API17) 부터 os가 모니터링 하여 정리

O

If has permissions WRITE_EXTERNAL_STORAGE or READ_EXTERNAL_STORAGE

sdcard상태에 따라 사용 불가능 할 수도 있음
앱 외부 파일context.getExternalFilesDir()

WRITE_EXTERNAL_STORAGE

*KITKAT(API19) 부터는 권한 필요 없음

 /storage/sdcard/Android/data/패키지명/files

-

O

If has permissions WRITE_EXTERNAL_STORAGE or READ_EXTERNAL_STORAGE

sdcard상태에 따라 사용 불가능 할 수도 있음

외부공용공간
android.os.Environment.getExternalStorageDirectory()

WRITE_EXTERNAL_STORAGE

/storage/sdcard

-XIf has permissions WRITE_EXTERNAL_STORAGE or READ_EXTERNAL_STORAGE 

*auto clean : OS가 알아서 지워 준다고 하더라도 너무 믿지 말자. 그냥 개발자가 필요한 파일은 남겨두고 다 쓴 파일은 지우도록 하는게 맘편하다.

** 루팅 된 폰/루트 권한이 있는 앱은 다 접근 및 수정 가능함, 다른 앱의 캐시 제거 권한이 있는 앱에서 캐시폴더 내의 데이터 삭제 가능함


설정 - 앱 정보 에서 보이는

데이터 사용량은 files폴더가 차지하는 공간이,

캐시 사용량은 cache폴더가 차지하는 공간이 보인다.


- 앱 내/외부 파일/캐시 폴더에는 미디어 파일을 넣더라도 os가 스캔해서 라이브러리에 추가하지 않는다.

- 앱 외부 파일/캐시 폴더는 WRITE_EXTERNAL_STORAGE / READ_EXTERNAL_STORAGE 권한을 가진 앱이 접근 가능하다. 그럴 일은 없겠지만 어느 싸이코 개발자가 애먼 카톡/페북 앱 등등의 파일/캐시를 지울수도 있다는 얘기다.

- 외부 공용 공간을 사용하는 앱은... 안좋게 말하면 똥싸놓고 안치우는 경우가 생길 수 있다. (앱 삭제시 같이 지워지지 않으므로)


요즘 나오는 디바이스는 굳이 sdcard를 쓰지 않아도 될만큼 저장공간이 넉넉하게 나오니 웬만하면 앱 내부에 있는 폴더를 쓰는게 나을 것 같다.

Posted by GOODEVENING
,