【问题标题】:How to solve the image picker crash app error?如何解决图像选择器崩溃应用程序错误?
【发布时间】:2019-08-15 14:04:15
【问题描述】:

我在选择图像时出现应用程序崩溃。我正在使用 image_picker:0.5.0+7 使用任何 ImageSource 都会使应用程序崩溃。

文件_fileState;

Future getImage(ImageSource imageSource) async{
  // using your method of getting an image
  final File image = await ImagePicker.pickImage(source: imageSource);

  print("path:: ");
  setState(() {
   // print("path:: "+image.path);
    _fileState = image;
  });

}

关闭虚拟机 E/AndroidRuntime(16049):致命异常:主要 E/AndroidRuntime(16049):进程:com.grain.test_camera,PID:16049 E/AndroidRuntime(16049): java.lang.RuntimeException: 无法恢复活动 {com.grain.test_camera/com.grain.test_camera.MainActivity}: java.lang.RuntimeException:交付失败 结果 ResultInfo{who=null, request=2342, result=-1, data=Intent { dat=content://com.android.providers.media.documents/document/image:25272 flg=0x1 }} 到活动 {com.grain.test _camera/com.grain.test_camera.MainActivity}:java.lang.IllegalStateException:从选择器接收到的图像是 没有要求 E/AndroidRuntime(16049):在 android.app.ActivityThread.performResumeActivity(ActivityThread.java:3506) E/AndroidRuntime(16049):在 android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3546) E/AndroidRuntime(16049):在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2795) E/AndroidRuntime(16049):在 android.app.ActivityThread.-wrap12(ActivityThread.java) E/AndroidRuntime(16049): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527) E/AndroidRuntime(16049):在 android.os.Handler.dispatchMessage(Handler.java:110) E/AndroidRuntime(16049): 在 android.os.Looper.loop(Looper.java:203) E/AndroidRuntime(16049):在 android.app.ActivityThread.main(ActivityThread.java:6251) E/AndroidRuntime(16049): 在 java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(16049):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063) E/AndroidRuntime(16049):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924) E/AndroidRuntime(16049):原因:java.lang.RuntimeException:传递结果失败ResultInfo{who=null, request=2342, 结果=-1,数据=意图 { dat=content://com.android.provid ers.media.documents/document/image:25272 flg=0x1 }} 到活动 {com.grain.test_camera/com.grain.test_camera.MainActivity}: java.lang.IllegalStateException:从picke接收到图像 r 没有被请求

我不知道我能做什么,请帮帮我

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    可能与 AndroidX 兼容性有关。你必须avoid AndroidXmigrate your project to AndroidX

    在版本0.5.0之后发生了重大变化

    【讨论】:

    • 我尝试降级我的项目并且不使用 androidX 但它不起作用。我仍然有上面的错误
    【解决方案2】:

    image_picker 插件不再支持camera permission 条件。例如,当我们尝试从应用程序访问相机时,该应用程序会要求我们获得许可。 现在,由于image_picker 插件已移除该条件,我们需要使用permission_handler 插件手动请求权限。阅读有关此更改的更多详细信息here

    使用this插件手动添加请求,即运行时,你应该能够摆脱这个崩溃。

    【讨论】:

    • 你能举个例子来说明如何使用权限吗?
    • 查看此链接。它有关于如何授予权限运行时的很好的例子。 youtube.com/watch?v=fNklvY1FEao
    【解决方案3】:

    我发现在开发者模式下,手机关闭了颤振的主要活动,因为开发者选项中有一个选项,包作者的评论是

    在 Android 上,由于各种原因,可以在启动图像选择器后杀死并重新启动 MainActivity。这可以通过在手机设置应用的开发者选项中选择“不让活动保持活跃”选项来测试。

    然后,当我禁用此选项时,我会在我检查的每个设备中得到结果。此描述的链接是here。我希望它对你有用。

    【讨论】:

      【解决方案4】:

      我有同样的错误 选择图像时图像选择器崩溃

      我通过使用 images_picker 解决了这个问题,这将代替 image_picker

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
      【解决方案5】:

      IOS 模拟器有问题。

      对于任何有同样问题的人,我需要在 Info.plist 中设置权限消息

      <key>NSPhotoLibraryUsageDescription</key>
      <string>This app needs to access your photo galery.</string>
      <key>NSCameraUsageDescription</key>
      <string>This app needs to access your camera.</string>
      

      【讨论】:

        【解决方案6】:

        似乎 image_picker 文档已更新。

        您必须在应用重新启动时使用retrieveLostData(迁移到 AndroidX 否则您可能会遇到强制关闭错误)

        Future<void> retrieveLostData() async {
            final LostDataResponse response = await ImagePicker.retrieveLostData();
            if (response == null) {
                return;
            }
            if (response.file != null) {
                setState(() {
                    if (response.type == RetrieveType.video) {
                        _handleVideo(response.file);
                    } else {
                        _handleImage(response.file);
                    }
                });
            } else {
                _handleError(response.exception);
            }
        }
        

        【讨论】:

        • 我不知道为什么这是公认的答案,因为这实际上并不能解决问题。
        • 这里一样,仍然不知道为什么这有助于防止崩溃,对我来说,pickImage() 函数之后的代码行甚至在崩溃之前都没有执行,所以在选择图像之后崩溃是不可避免的
        • @aswindarma 你们都解决了吗?我也遇到同样的问题
        • @JohnJoe 我做了,如果您已经使用了最新版本的 image_picker 并且仍然遇到崩溃问题,则应该是 image_picker 无法与您使用的某些依赖项一起工作,例如,在我删除然后重新运行我的其他依赖项,最后我发现 image_picker 不能与 image_picker_saver 一起使用
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多