image_picker: ^0.7.2+1 使应用崩溃

Posted

技术标签:

【中文标题】image_picker: ^0.7.2+1 使应用崩溃【英文标题】:image_picker: ^0.7.2+1 makes the app crash 【发布时间】:2021-06-14 02:16:47 【问题描述】:

我在我的应用中使用 image_picker: ^0.7.2+1 here

我正在使用此代码打开相机

     File _image;
  final picker = ImagePicker();

  Future getImage() async 
    final pickedFile = await picker.getImage(source: ImageSource.camera);

    setState(() 
      if (pickedFile != null) 
        _image = File(pickedFile.path);
       else 
        print('No image selected.');
      
    );
  

还在 android/app/src/main/AndroidManifest.xml 中添加了这些权限

<uses-permission android:name="android.permission.CAMERA" />
 <uses-feature android:name="android.hardware.camera" />
 <uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.INTERNET"

使用上述软件包后,当我的相机立即打开时,应用程序崩溃并且在终端中没有错误消息,它只是说设备已断开连接。 (应用程序崩溃是指应用程序自动重启(从启动屏幕)并且捕获的图像也丢失了)

上述应用程序崩溃问题仅出现在 android 10 或更高版本的 android 版本中,也出现在 android 10 或更高版本 (android 11) 中,而且这个包不要求在 android 10 或 11 中获得相机的许可,我猜这可能是实际的这个问题背后的问题

当我使用 android 8 或 android 版本低于 android 10 的设备时,image_picker: ^0.7.2+1 here 与上面给定的代码完全相同(代码中没有任何更改,只是将设备从 android 更改为11 到 android 8) 应用程序按预期请求许可,然后相机打开并成功捕获图片,因此一切正常,同样的事情在 android 10 或 android 11 中失败

注意:我也尝试将 permission_handler 插件与 image_picker 一起使用,但它也对我不起作用

谁能帮我解决这个问题

如果有人知道 image_picker 的任何替代代码或包,请告诉我.. 我只是想从相机中拍张照片

【问题讨论】:

【参考方案1】:

我也经历了所有这些,设置权限处理,进行缓存修复,以及我在网上找到的其他一些内容,一周后无法解决。拍摄后,Image_picker 仍然使我的应用程序崩溃。我最终的解决方案是使用 camera_camera 2.0.1。这是一个糟糕的库名称,它不包含压缩,但相机界面更好,开箱即用。

import 'package:camera_camera/camera_camera.dart';

onPressed: ()
        Navigator.push( context, MaterialPageRoute(
            builder: (_) => CameraCamera(
                  onFile: (file) 
                    // Do what you like with File file
                    // I convert to base64 ready to upload
                    Navigator.pop(context);
                  ,
                )))
        ,

【讨论】:

【参考方案2】:

android:requestLegacyExternalStorage="true" 作为属性添加到AndroidManifest.xml 中的&lt;application&gt; 标记。在面向 Android Q 的应用上,该属性默认为 false。

【讨论】:

首先感谢..但是在阅读 image_picker 的文档后,我已经将此 android:requestLegacyExternalStorage="true" 作为属性添加到 但它不起作用 请任何人提出其他解决方案【参考方案3】:

///// 已解决 /////

解决此问题所需要做的就是将这 6 行添加到 ios/Runner/Info.plist

<key>NSPhotoLibraryUsageDescription</key>
<string>Allow access to photo library</string>

<key>NSCameraUsageDescription</key>
<string>Allow access to camera to capture photos</string>

<key>NSMicrophoneUsageDescription</key>
<string>Allow access to microphone</string>

【讨论】:

以上是关于image_picker: ^0.7.2+1 使应用崩溃的主要内容,如果未能解决你的问题,请参考以下文章

flutter 上传图片 image_picker 的使用

选择美女-flutter image_picker插件更新

Flutter IOS 应用程序不会以 image_picker 开头:^0.6.3+4

为颤振添加 image_picker 依赖项时出错(iOS)

无法使用 Flutter Web 的 image_picker 将文件上传到 Firebase 存储

错误:不支持的操作:使用 image_picker 时的 _Namespace