본문 바로가기

Android

[Android,Java] 안드로이드13 (SDK33) 대응 파일 업로드 (File Read) 관련 퍼미션 정리 (수정. 심사통과 안됨!!)

// 9월 11일 수정

// 여러번 이의 제기와 심사를 반복하였지만 통과시켜주지 않음 다른방법으로 파일처리 완료

 

23년 9월 1일자 오늘부터 마켓에 업데이트를 하려면 targetSdkVersion 을 33 이상으로 해라 라고 경고가떠서 

아무생각없이 8월마지막주에 타겟만 올리고 배포를 해버렸다 

(테스트폰은 안드로이드10 이라 잘만되었기에....)

 

그런데 문제가 발생

퍼미션 권한 등의 오류 (퍼미션체크 부분)등으로 앱실행이 안되어버린것 13버전 혹은 12버전 최신 기종 OS에서 

문의가 빗발쳤다... 

 

이래저래 찾아보다 결국 문제를 해결은 했지만 구글마켓 언제 검토해줄래 언제까지 검토중이니.... 

 

우선 이전 버전들에서는 혹은 타겟이 낮은 앱에서는 

 

외부저장소에 파일을 읽어서 업로드를 한다던가 사용을할때 

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

해당 퍼미션을 사용했을것이다 나 또한 이걸로 다했었다 

물론 10이상부터는 

android:requestLegacyExternalStorage="true"

이부분도 추가를 해주어야 했지만 말이다 

 

그리고 최신기종에 맞게 미디어파일등 접근할때 사용되는 퍼미션이 바뀌어서 추가도 해주었다

<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />

그래서 tedPermission 등 라이브러리를 써서 해당 퍼미션도 다 수락하게 하고 

넘어가게 했었다

문제는 특정 최신폰에서 파일은 선택이 되지만 업로드할때 파일이 null 인 현상이 발생

로그를 살펴보니 퍼미션 문제가 뜬다

 

위에 이미지 비디오 오디오 이 타입들은 해당 퍼미션으로 선택도 되고 업로드도 잘되어진다 

문제는 document 타입이었다 

암만 찾아봐도 퍼미션이 따로 있는것도 아니고 

이제  READ_EXTERNAL_STORAGE는 33에서는 사용안한다고 하고 

찾다찾다 드디어 찾았다

 

이제 일반 파일들은 보안상의 이유로 사용자가 직접 해당앱의 권한을 켜줘야 하는것으로 바뀐것

 

> 모든 파일에 대한 접근 <

 

해당 셋팅으로 들어가서 파일사용권한을 켜줘야한다 

 

그래서 인트로에서 퍼미션 체크를 하고 넘어가는 부분에 하나를 추가해줬다

 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    if (!Environment.isExternalStorageManager()) {
    	//모든 파일 접근 권한 셋팅으로 이동하는 Intent
        Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
        resultActiviy.launch(intent);
    }else{
    	//메인 액티비티로 이동
    }
}

 

외부저장소권한이 없으면 

ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION 을 이용해서 셋팅을 열고 

해당 앱의 권한을 킬수있도록 유도했다

 

그리고 다시 앱으로 돌아오게 하려해봣는데 앱이 종료되고 다시 실행하면 권한이 있기때문에 

메인으로 이동하게되며 

파일첨부등으로 document 를 올릴수 있게 되었다

 

많은 사람들이 위에 3가지는 거의다 했을것으로 보여지고 

레퍼런스 뒤져가며 이것저것 다해봣는데 

아주 간단한 문제였던것이다. 끝