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

sd카드 쓰기허용했는데 쓰기접근거부가 생기는 문제입니다..

0 추천
4.3버전으로 개발된 앱을 4.4.버전의 최신폰에 적용하려는데

sd카드의 내용을 쓸 수 없는 문제가 생깁니다.

기존 코드는 system.getenv()를 이용해 "2차 저장소" 및 "외부저장소"에 대한

폴더위치를 가져와서 자료를 저장했습니다.

 

즉, sd카드가 있으면, 거기에 저장하고, 없으면 메모리에 저장하는 겁니다.

 

새로운 코드는 ContextCompat.getExternalFilesDirs()를 이용하여 File[] 리스트를 가져옵니다.

이때, 0번만 있고 디렉토리면 메모리에 저장, 1번도 있고 디렉토리면 sd카드에 저장하게 변경했습니다.

4.4 버전에서는 저렇게 쓰면 된다고 검색이 되어 썼지만.. 액세스거부당했습니다.

당연히 매니페스트에서는 WRITE_EXTERNAL_STORAGE 허용해줬구요.

영문자료를 보니까, syncronized permission 어쩌구 저쩌구하는 경우를 제외하고는,

sd카드 못쓴다는 둥.. 그런 소리가 적혀있었습니다.

 

이 부분에서 잘 모르겠습니다.

4.4에서 쓰되 퍼미션허용을 어떻게 하는지 아시는 분 있으시면 도와주시면

감사하겠습니다.

 

참고로 저는 C/C++/C#을 주로하고요, 안드로이드-자바는 그냥 바로 시작했습니다.

이전 사람이 짜놓고 간 오류부분을 분석해서 수정중인데.. 잘 안되네요.

파일한개 만들어 읽고 쓰는데 뭐이리 안되는지... 핸드폰마다 또 다틀리고..

버전이 업글되면 하위버전이랑 호환도 안되고... 완전 승질이 납니다. ㅡ.ㅜ
흠냥 (180 포인트) 님이 2014년 10월 29일 질문

2개의 답변

0 추천
언뜻 스쳐지나가면서 봤던 거라 확실치는 않습니다만, 혹시나 도움이 될까하고 적어 봅니다.

KK에서는 SD카드에 데이터 기록시 해당 앱의 폴더에만 가능한 게 정상입니다(SD카드 ROOT/Android/data/패키지명/ 이하)

KK의 어느 시점까지는 제조사에서 그 부분을 처리해서 기존처럼 사용가능하도록 했습니다만, 그 이후부터는 정석대로 지정된 방식으로만 쓸 수 있게 된 걸로 기억합니다.(구글의 압박?)

그래서 아마 4.3에서 됐는데, 4.4에서는 안되다라는 증상이 발생한 것 같습니다.

이 원인이 맞는지 모르겠으니, 저장되는 폴더 위치를 변경해보시고 확인해 보세요. 앱 업그레이드라면 약간 골치 아플수 도 있겠네요
cc1232 (35,280 포인트) 님이 2014년 10월 30일 답변
0 추천
4.4 부터 일반앱은 sd카드 영역 중 자신에게 할당된 영역에만 쓰기가 가능하며 다른 곳은 읽기만 가능합니다.

이건 퍼미션으로 해결이 안되며 방법이 없습니다.

앱을 여기에 맞게 수정해야 합니다.
익명사용자 님이 2014년 10월 30일 답변
...