이전 포스팅에서 외부 폴더에 접근하기 위해서 사용했었는데 앱을 배포할려고 심사를 올린 것이 리젝이 되었습니다.
MediaStore API를 사용하도록 앱을 업데이트하고 모든 파일 액세스(MANAGE_EXTERNAL_STORAGE)권한을 삭제하시기 바랍니다.
물론 보완하도록 url 을 하나 보내줬는데요.
https://developer.android.com/training/data-storage/shared/media
공유 저장소의 미디어 파일에 액세스를 하는 방법을 공유를 해줬습니다.
하지만 현재 개발하고 있는 언어는 Flutter 라서 이 부분을 native로 빼기란 힘들것 같다는 느낌이 들더라구요.
https://pub.dev/packages/media_store_plus
안드로이드에서 문제가 되었던 부분은 위의 패키지를 가지고 해결을 할 수 있었습니다.
우선 AndroidManifest.xml 에 아래와 같이 넣어줍니다.
<!-- required from API level 33 -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <!-- To read images created by other apps -->
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <!-- To read audios created by other apps -->
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <!-- To read vidoes created by other apps -->
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE" <!-- To read all files until API level 32 -->
android:maxSdkVersion="32" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" <!-- To write all files until API level 29. We will MediaStore from API level 30 -->
android:maxSdkVersion="29" />
<application
---------------------------
android:requestLegacyExternalStorage="true">
<!-- Need for API level 29. Scoped Storage has some issue in Android 10. So, google recommanded to add this. -->
<!-- Read more from here: https://developer.android.com/training/data-storage/shared/media#access-other-apps-files-->
</application>
소스로 해결한 부분은 아래와 같습니다.
var mediaStorePlugin = MediaStore();
int sdkVersionInt = await mediaStorePlugin.getPlatformSDKInt();
MediaStore.appFolder = '원하는 폴더명';
file = File('임시로저장될폴더/임시로저장될파일명');
file.writeAsBytes(response.bodyBytes);
bool msDownloadResult = await mediaStorePlugin!.saveFile(tempFilePath: file.path,
dirType: DirType.download,
dirName: DirName.download
);
혹시나 저처럼 이런 경우가 생기신 개발자를 위해서 포스팅을 합니다.
도움이 되셨다면 구독부탁드려요 ^^
[햄버거 메뉴]Flutter Drawer 제어방법 (0) | 2023.05.24 |
---|---|
[InAppWebView] Android Intent 처리방법 (0) | 2023.05.24 |
[Flutter] GetX로 페이지 이동시 오류 아닌 오류 (0) | 2023.05.19 |
[Flutter] Safari Debug 하는 방법 (0) | 2023.05.03 |
[Flutter] Http 제어 해보기 (feat. TimeoutException, SocketException) (0) | 2023.04.14 |