繁体   English   中英

权限访问图片/视频 Android 13 [Flutter]

[英]Permission Access Image/ Video Android 13 [Flutter]

我正在使用 package images_picker 并将平台更新到 sdk 33,我在我的应用程序和库中也有更新权限,但这不起作用。 扩展抛出弹出窗口“读取 memory 卡访问被拒绝”似乎未授予权限,但我检查应用程序信息具有访问照片和图像的权限。

  • 这是我在清单链接中定义的所有权限

  • 当应用程序第一次运行时,我请求权限+操作访问所有文件:链接

  • 然后当我选择图像/视频时,结果是“读取 memory 卡访问被拒绝”链接

    flutter 医生:

[✓] Flutter (Channel stable, 2.10.0, on macOS 12.5.1 21G83 darwin-arm, locale en-VN)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 13.4.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2021.2)
[✓] VS Code (version 1.71.2)
[✓] Connected device (4 available)
[✓] HTTP Host Availability

• No issues found!

从图库/相机访问图像和视频在 Android 13 中与我们在 iOS 设备中使用 flutter 时相同,

class MyPermissionHandler {
  static Future<bool> checkPermission(
    BuildContext context, {
    String permissionName = 'gallery',
  }) async {
    if (Platform.isAndroid) {
      final androidInfo = await DeviceInfoPlugin().androidInfo;
      final sdkInt = androidInfo.version.sdkInt;
      if (sdkInt < 33 && permissionName == 'gallery') {
        return true;
      }
    }
    FocusScope.of(context).requestFocus(FocusNode());
    Map<Permission, PermissionStatus> statues;
    switch (permissionName) {
      case 'camera':
        {
          statues = await [Permission.camera].request();
          PermissionStatus? statusCamera = statues[Permission.camera];
          if (statusCamera == PermissionStatus.granted) {
            return true;
          } else if (statusCamera == PermissionStatus.permanentlyDenied) {
            showPermissionDialog(context, permissionName);
            return false;
          } else {
            return false;
          }
        }
      case 'gallery':
        {
          statues = await [Permission.photos].request();
          PermissionStatus? statusPhotos = statues[Permission.photos];
          if (statusPhotos == PermissionStatus.granted) {
            return true;
          } else if (statusPhotos == PermissionStatus.permanentlyDenied) {
            showPermissionDialog(context, permissionName);
            return false;
          } else if (statusPhotos == PermissionStatus.limited) {
            showLimitedPermissionDialog(context, permissionName);
            return false;
          } else {
            return false;
          }
        }
    }
    return false;
  }

如果将首先请求,如果用户拒绝它会再次请求获得访问权限,但是在用户第二次拒绝访问权限后,您需要显示showDialog弹出窗口以打开设置并从设置中授予访问权限。

还有一件事,小于 13 的 android 版本将检查 package device info import 'package:device_info/device_info.dart'; 设备信息,以前的设备将是相同的并且更新将像那样。

  if (Platform.isAndroid) {
      final androidInfo = await DeviceInfoPlugin().androidInfo;
      final sdkInt = androidInfo.version.sdkInt;
      if (sdkInt < 33 && permissionName == 'gallery') {
        return true;
      }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM