在Nougat从相机捕获图像并从Uri获取文件

时间:2017-12-12 21:08:24

标签: android android-7.0-nougat

在Android Nougat及以上版本中,从相机意图中捕获图像的方法已更改,并且以下代码对我来说工作正常。

Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                                   // File file = new File(AppGlobal.URI_CAPTURED_IMAGE.getPath());

                                    AppGlobal.URI_CAPTURED_IMAGE = FileProvider.getUriForFile(parent, context.getPackageName() + ".provider", AppGlobal.getOutputMediaFile());
                                }
                                else
                                {
                                    AppGlobal.URI_CAPTURED_IMAGE = Uri.fromFile(AppGlobal.getOutputMediaFile());
                                }
                                camera.putExtra(MediaStore.EXTRA_OUTPUT, AppGlobal.URI_CAPTURED_IMAGE);
                                camera.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                                startActivityForResult(camera, WritePostFragment.REQUEST_CODE_PHOTO_CAPTURE);

在onActivityResult方法中,我也可以在ImageViews中显示捕获的图像。

Glide.with(parent).load(AppGlobal.URI_CAPTURED_IMAGE).centerCrop().into(profilePic_iv);

但是当我使用相同的uri获取File时,它表示在给定路径中不存在任何文件。可能是什么问题?我如何解析Uri以获取文件。它似乎与版本有关。

示例uri如下:

  

内容://com.example.demo.provider/external_files/Camera/IMG_20171213_015646.jpg

1 个答案:

答案 0 :(得分:1)

  

我如何解析Uri以获取文件

你不是。而且,你不需要。您的文件是AppGlobal.getOutputMediaFile()返回的内容。您需要保留该值(包括将其置于保存的实例状态Bundle,以防您的进程在相机应用程序位于前台时终止)。有关如何将ACTION_IMAGE_CAPTUREFileProvider一起使用,请参阅this sample app