【问题标题】:Flutter image-picker explicitly ask permission for android version 33 and aboveFlutter 图像选择器明确请求 android 版本 33 及更高版本的权限
【发布时间】:2023-01-25 13:59:19
【问题描述】:

Android 33及以上版本图库打不开,无请求权限。

Permission.storage.request() 在 android 13 上允许时返回 permanentlyDenied

【问题讨论】:

    标签: android flutter dart permissions gallery


    【解决方案1】:

    如果您的应用以 Android 13 或更高版本为目标,并且需要访问其他应用创建的媒体文件,则您必须请求以下一项或多项精细媒体权限,而不是READ_EXTERNAL_STORAGE允许:

    https://developer.android.com/about/versions/13/behavior-changes-13#granular-media-permissions

    pubspec.yaml:

    device_info_plus: ^8.0.0
    

    清理并获取依赖项以避免崩溃

    flutter clean && flutter pub get
    

    安卓清单:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
    

    无论您的代码在哪里:

    bool storagePermission = true;
    bool videosPermission = true;
    bool photosPermission = true;
    
    // Only check for storage < Android 13
    DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
    AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
    if (androidInfo.version.sdkInt >= 33) {
      videos = await Permission.videos.status.isGranted;
      photos = await Permission.photos.status.isGranted;
    } else {
      storage = await Permission.storage.status.isGranted;
    }
    
    if (storagePermission && videosPermission && photosPermission) {
      // no worries about crash 
    } else {
      // write your code here
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 2017-07-17
    相关资源
    最近更新 更多