마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

외장 메모리 권한 질문좀 드리고 싶습니다.

0 추천
DOCUMENT_TREE 사용해서 외장메모리 최상단 경로를 받아왔고,

그 경로를 프리퍼런스에 저장해서 쓰고 있습니다.

 

그런데 문제는 메모리카드 최상단 경로를 받으면

다른 앱들은 그 아래쪽 경로들은 다 사용을 자유롭게 하던데,

저는 최상단 폴더가 아니면

  java.lang.SecurityException: Permission Denial: writing com.android.externalstorage.ExternalStorageProvider uri content://com.android.externalstorage.documents/tree/5462-A548%3ADCIM/document/5462-A548%3ADCIM from pid=1257, uid=10562 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()

 

이렇게 퍼미션 에러가 뜹니다.

 

DOCUMENT_TREE로 권한을 받은곳만 저장이 되고 있는데,

한번의 최상단 폴더 지정 후 그 이후로 자유롭게 쓰고 싶습니다.

 

도와주세요
SHParks (140 포인트) 님이 2018년 8월 1일 질문

1개의 답변

0 추천
DOCUMENT_TREE사용해서 메모리카드 최상단 경로를 받으신게 맞다면 URI를 잘못 생성하신것 같네요. 위 에러에서의 URI는 /DCIM 폴더를 최상단으로 하는 Tree를 가리키고 있네요.
회색 (21,000 포인트) 님이 2018년 8월 1일 답변
저거는 다른앱들 보면 최상단 권한만 받고 하위폴더 모두 진입이 되서
제가 최상단에 권한을 받은 다음에, (content://com.android.externalstorage.documents/tree/5462-A548)

최상단의 하위폴더인 DCIM에 저장을 해보려고 했었습니다만,
저 에러가 뜨면서 실패했던 부분이었습니다 ㅠㅠ

지금 상황이
sd카드안의 파일을 열고, 저장을 누르면 그 경로 그대로 저장을 하고 싶은데,
DOCUMENT_TREE로 메모리 최상단을 받으면 최상단만 저장이되고,

그 이후에 DOCUMENT_TREE로 최상단이 아닌 곳을 지정하고 프리퍼런스에 담아둬도

현재 들어있는 값이 아닌 메모리 최상단은 한번 참조 했기 때문인지 저장이 잘되고
두번째한 곳도 저장이 잘 됩니다.


결국 참조를 했던 곳 만큼은 저장이 잘 되는데
최상위 한번으로 하위 경로 모두의 권한을 받아오는 부분이 안되고 있습니다 ㅠㅠ

사용중인 소스코드 입니다.
http://www.masterqna.com/android/84949/document_tree%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-sd%EC%B9%B4%EB%93%9C-externalstorage-%EA%B6%8C%ED%95%9C-%EC%A7%88%EB%AC%B8-%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4?show=84949#q84949
...