权限访问图像/视频Android 13 [抖动]

von4xj4u  于 2022-12-09  发布在  Android
关注(0)|答案(1)|浏览(340)

我正在使用软件包images_picker和更新平台到sdk 33,我在我的应用程序和库中有更新权限,但这也不工作。扩展抛出弹出“读取存储卡访问被拒绝”似乎没有授予权限,但我在应用程序信息检查有权限访问照片和图像。

  • 这是我在清单link中定义所有权限
  • 且当应用程序第一次运行时,我请求权限+动作访问所有文件:link
  • 然后,当我选择图像/视频时,结果是“读取存储卡访问被拒绝”link

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!
uxh89sit

uxh89sit1#

在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弹出窗口以打开设置并从设置中给予访问权限。
还有一件事,Android版本,这是小于13将检查与包设备信息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;
      }
    }

相关问题