2023년 7월 12일 기준임을 꼭 참고 바란다.
⛔ 문제사항
멀쩡하게 잘 첨부 되던 사진이 어느날부터 되지 않았다. 해당 이슈는 Android에서만 발생하여 iOS 시뮬레이터나 실물기기에서는 문제 없이 작동하였다.
PlatformException(read_external_storage_denied, User did not allow reading external storage, null, null)
이런 에러가 발생했는데, 말 그대로 권한이 거부된 상태였다.
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
내가 선언했던 것은 이렇게 3가지로 아래 두 개의 STORAGE 관련 권한이 사진 및 미디어에 접근할 수 있는 권한이다. 그러나 설정에서 본 앱의 권한에는 사진 및 미디어가 포함되어있지 않는 현상이 발생하여 해결하는 데에 꽤나 애를 먹었다.
✅ 해결방안
<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" />
원인은 다름 아닌 Android13 이상에서 TargetSDK 33으로 지정해주며 EXTERNAL_STORAGE를 이렇게 세분화하였기 때문이다. 따라서 TargetSDK 33 버전에서는 세분화된 권한을 지정해주지 않으면 모든 미디어에 접근할 수 없도록 바뀐 것이다.
일반적으로는 이렇게 나누어진 미디어 권한 중에서 내가 필요한 것만 선언해주면 쉽게 해결할 수 있다.
하지만, 나의 경우엔 사진을 첨부할 수 있도록 사용한 라이브러리, file_picker에서는 이 권한에 대해 아직 대응한 부분이 없어 새로이 권한을 선언하여도 작동하지 않았다. 결국 targetSdkVersion을 강제로 다운그레이드 함으로써 해결했다. 추후에 이 문제를 다시 직면하게 되면 SDK 버전을 올려 다시 세분화된 권한을 선언하거나 file_picker 라이브러리를 변경하면 될 것 같다.
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId ""
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
minSdkVersion 22
targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
❗출처
참고 사이트 : https://salmonpack.tistory.com/46
'Flutter > 문제해결' 카테고리의 다른 글
Flutter의 IconButton 완전 정복하기 (0) | 2023.11.02 |
---|---|
Android 무선 디버깅 하기 (0) | 2023.11.02 |
문제해결 : flutter_lints 에러 (0) | 2023.09.25 |
문제해결 : Unable to find bundled Java version (0) | 2023.09.25 |
Flutter M1에서 세팅하기 (0) | 2023.09.20 |