Flutter

[Flutter] 안드로이드 READ_MEDIA_IMAGES/VIDEO 권한 삭제 및 Android Photo Picker 적용

디벨로펄 2025. 9. 1.
반응형

 

구글 플레이 콘솔 정책 거부

24년 12월 부터 READ_MEDIA_IMAGES/VIDEO를 안쓰는 것이 권장되었다.

최근 업데이트 하려고 할 때 아래 사유로 거절이 되었고

이에 대응 해서 Android Photo Picker를 적용한다.

 

앱이 허용되는 READ_MEDIA_IMAGES/READ_MEDIA_VIDEO 권한의 사용 방식을 준수하지 않는 것으로 확인되었습니다.

앱에서 기기의 미디어 파일에 일회성으로 또는 가끔가다 액세스해야 합니다.
핵심 사용 사례에 따라 기기의 공유 저장소에 있는 사진 및 동영상 파일에
지속적으로 액세스해야 하는 앱만 사진 및 동영상 권한을 사용할 수 있습니다.

요구사항에 관한 자세한 내용은 Google Play의 사진 및 동영상 권한 정책을 참고하세요.

 

 

Android Photo Picker 적용 -  image_picker

안드로이드 가이드

가 있기 하지만, flutter 개발을 위해서는 Flutter package를 활용한다.

 

image_picker라는 패키지를 활용한다.

class ImageService {
  final SupabaseClient _supabase = Supabase.instance.client;
  final ImagePicker _picker = ImagePicker();
  static const double _maxWidth = 1024.0;  // 최대 너비
  static const double _maxHeight = 1024.0; // 최대 높이
  static const int _quality = 85;     // JPEG 품질 (0-100)

  // 이미지 선택 (갤러리 또는 카메라)
  Future<File?> pickImage({required bool fromCamera}) async {
    final XFile? image = await _picker.pickImage(
      source: fromCamera ? ImageSource.camera : ImageSource.gallery,
      maxWidth: _maxWidth,
      maxHeight: _maxHeight,
      imageQuality: _quality,
    );
    
    if (image == null) return null;
    return File(image.path);
  }
 }

 

기존에는 권한 관리를 따로 해줘야했지만

이젠 따로 권한 관리를 해주지 않아도 된다.

 

 

 

다음과 같은 코드들이 전부 필요 없어졌다.

개발하기는 더 편해졌다.

    // // 권한 요청
    // final hasPermission = fromCamera 
    //   ? await PermissionService.requestCameraPermission(context)
    //   : await PermissionService.requestStoragePermission(context);

    // if (!hasPermission) {
    //   if (mounted) {
    //     ScaffoldMessenger.of(context).showSnackBar(
    //       const SnackBar(
    //         content: Text('권한이 없어 사진을 선택할 수 없습니다.'),
    //         backgroundColor: Colors.red,
    //       ),
    //     );
    //   }
    //   return;
    // }
반응형

댓글