hoony's web study

728x90
반응형

 

 

[Flutter] Android / IOS 다운로드 폴더 접근

- 개요 안드로이드에서는 내 파일/Download 폴더 IOS에서는 File, 어플리케이션에서 저장되는 파일을 내 핸드폰에서 확인하고 저장하기 위해서는 아래와 같이 하시면 됩니다. - 예제 [pubspec.yaml] path_pr

islet4you.tistory.com

이전 포스팅에서 외부 폴더에 접근하기 위해서 사용했었는데 앱을 배포할려고 심사를 올린 것이 리젝이 되었습니다. 

리젝사유

MediaStore API를 사용하도록 앱을 업데이트하고 모든 파일 액세스(MANAGE_EXTERNAL_STORAGE)권한을 삭제하시기 바랍니다. 

물론 보완하도록 url 을 하나 보내줬는데요. 
https://developer.android.com/training/data-storage/shared/media

 

공유 저장소의 미디어 파일에 액세스  |  Android 개발자  |  Android Developers

DataStore는 로컬 데이터를 저장하는 최신 방법을 제공합니다. SharedPreferences 대신 DataStore를 사용해야 합니다. 자세한 내용은 DataStore 가이드를 참고하세요. 공유 저장소의 미디어 파일에 액세스 컬

developer.android.com

공유 저장소의 미디어 파일에 액세스를 하는 방법을 공유를 해줬습니다. 
하지만 현재 개발하고 있는 언어는 Flutter 라서 이 부분을 native로 빼기란 힘들것 같다는 느낌이 들더라구요.

 

해결방법

https://pub.dev/packages/media_store_plus

 

media_store_plus | Flutter Package

To use Android MediaStore API in Flutter, It supports both read & write operation in every android version through flutter.

pub.dev

안드로이드에서 문제가 되었던 부분은 위의 패키지를 가지고 해결을 할 수 있었습니다. 
우선 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
            );

혹시나 저처럼 이런 경우가 생기신 개발자를 위해서 포스팅을 합니다. 

도움이 되셨다면 구독부탁드려요 ^^

반응형

 

728x90

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading