-
[React Native_android 에러해결] 저장소접근권한 (target sdk32이하, 33이상 적용)► React Native/개발일기 2023. 11. 24. 20:42반응형
에러 상태
▼ 서론
앞전에 진행한, 'android target sdk 33 이슈' 작업중에, 이어서 추가 에러가 발생하였다.
android target sdk 33으로 업그레이드 하면서, 갑자기 오래된폰에서는 파일저장 접근권한허용이 뜨지않는다.. @@@ 너무해 ㅜㅜㅜ
- 해당기능형태: 사진다운로드받으면, 파일앱에 사진이 저장되는 기능.
파일앱에 저장하기위하여, 파일에 사진저장을위한 접근권한허용이 필요한데, 관련한 alert이 안뜬다.... ㄷ ㄷ
▼ 'android target sdk 33 이슈' 작업 내용: https://daram-tree.tistory.com/222
[React Native_에러해결] android target sdk 33 이슈
안드로이드 정책이 바뀌어서, 안드로이드 api 33으로 바꿔야만 배포가 가능하다. 그래서 지난주부터 react-native 업데이트부터 다양한 방법을 시도하며 각종 에러를 해결해나가는 눈빠지는 작업을
daram-tree.tistory.com
상황 분석
▼ 분석
아래와 같이 sdk33에서는 요청권한 코드가 세분화되고 변경되면서 발생한 오류로 보인다.
해결방법
1. AndroidManifest.xml 수정
▼ 기존코드
android> app> src> main> AndroidManifest.xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
▼ 변경된 코드
android> app> src> main> AndroidManifest.xml
<!-- compileSdkVersion:33부터 적용 --> <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" /> <!-- compileSdkVersion:32까지 적용 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
2. permission 퍼미션함수 수정
▼ 기존코드
const checkPermission = async () => { if (Platform.OS === "ios") { downloadImage(); } else { try { const msg = { title: "저장소 권한 필요", message: "사진을 다운로드하려면 앱이 저장소에 접근해야합니다.", }; const granted32 = await PermissionsAndroid.request( PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE, msg ); if (granted32 === PermissionsAndroid.RESULTS.GRANTED) { downloadImage(); console.log("저장권한이 부여되었습니다. (granted32)"); } else { CustomAlert("저장권한이 부여되지 않았습니다."); } } catch (error) { console.warn(error); } } };
▼ 변경된 코드
const checkPermission = async () => { // checkPermission함수생성: 안드로이드 저장소 접근권한 확인 if (Platform.OS === "ios") { // ios android인지 체크 진행 downloadImage(); // if(ios)= 이미지다운로드하는 함수(downloadImage())로 넘어감 } else { // if(android)= 권한체크 진행 try { const msg = { // msg= 권한안내 메세지 title: "저장소 권한 필요", message: "사진을 다운로드하려면 앱이 저장소에 접근해야합니다.", }; const granted33 = await PermissionsAndroid.request( // granted33= SDK33 이상에 적용되는 request(READ_MEDIA_IMAGES) PermissionsAndroid.PERMISSIONS.READ_MEDIA_IMAGES, msg ); const granted32 = await PermissionsAndroid.request( // granted32= SDK32 이하에 적용되는 request(WRITE_EXTERNAL_STORAGE) PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE, msg ); if (granted33 === PermissionsAndroid.RESULTS.GRANTED) { // if(SDK33이상)= SDK33이상에 맞는 권한허용체크 후, 이미지다운로드하는 함수(downloadImage())로 넘어감 downloadImage(); console.log("저장권한이 부여되었습니다. (granted33)"); } else if (granted32 === PermissionsAndroid.RESULTS.GRANTED) { // if(SDK32이하)= SDK32이하에 맞는 권한허용체크 후, 이미지다운로드하는 함수(downloadImage())로 넘어감 downloadImage(); console.log("저장권한이 부여되었습니다. (granted32)"); } else { CustomAlert("저장권한이 부여되지 않았습니다."); // 저장권한 거부한 상태 } } catch (error) { // 진행중에 에러난 상태 console.warn(error); } } };
AndroidManifest.xml 수정방법을 사수분이 어케저케 찾아내셨다
님은 갓사수
개인적으로 개발시행착오를 겪으면서, 그런 경험들을 기록하기도하고, 모은정보들을 메모하며, 개인공부내용을 공유하는 게시물입니다. 친절한 조언과 다양한 의견 남겨주시고, 소통해주시는분들은 언제든지 환영합니다 :D
반응형'► React Native > 개발일기' 카테고리의 다른 글
[React Native_에러해결] 'npx react-native run-android' (0) 2024.01.09 [React Native_에러해결] Cannot find module 'metro-config' (0) 2023.12.15 [React Native] 라이브러리 및 속성 사용법 (rn-fetch-blob) (1) 2023.11.24 [React Native_에러해결] android target sdk 33 이슈 (0) 2023.10.31 [React Native_에러해결] npx react-native run-android 에러 (0) 2023.10.30