[Flutter] Android13 권한 READ_EXTERNAL_STORAGE 와Permission_handler
굉장히 오랜만에 블로그 포스팅을 하게되었다.
우선. 이번 포스팅은 Android13 권한문제때문에 작성하게되었다.
Flutter Version
Flutter 3.10.5 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 796c8ef792 (3 months ago) • 2023-06-13 15:51:02 -0700
Engine • revision 45f6e00911
Tools • Dart 3.0.5 • DevTools 2.23.1
기존 권한설정
우선 Flutter -Android 에서 핸드폰의 내부데이터를 접근하기위해서 사용하는 권한은 다음과 같다.
AndroidManifest.xml을 살펴보면
와 같은 권한 설정이있는데, 어느순간부터 권한이 잘 되지않는다는 문의가 들어와서 확인을 해보았다.
Android13 권한 업데이트
https://developer.android.com/about/versions/13/behavior-changes-13?hl=ko
권한이 Android13되면서 업데이트된 내용이 몇몇 있다. 확인해보니,
유저의 핸드폰 내부데이터를 세분화되어 권한을 얻어야한다고 적혀있다.
해결법
기존에 사용하던 'android.permission.READ_EXTERNAL_STORAGE' 는 Android12까지만 적용되게 하고, 그 이상부터는 새로 적용되는 권한을 AndroidManifest.xml에 추가하면 된다.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
이렇게 작성해주면 끝!... 은 아니고, Flutter에서 사용하는 Permission_handler도 적용해야한다.
_androidStoragePermission() async {
int androidVersion = 0;
if (Platform.isAndroid) {
AndroidDeviceInfo androidInfo = await DeviceInfoPlugin().androidInfo;
androidVersion = int.tryParse(androidInfo.version.release) ?? 0;
}
if (androidVersion > 12) {
await Permission.photos.request();
await Permission.videos.request();
await Permission.audio.request();
} else {
await Permission.storage.request();
}
}
이렇게 android 버전을 확인해서 분기태워주면 끝이다.