在牛轧糖中从相机捕获图像并从 Uri 获取文件

In Nougat Capture Image from Camera and get file from Uri

在 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 方法中,我也可以在 ImageView 中显示捕获的图像。

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

但是当我使用相同的 uri 获取文件时,它说给定路径不存在文件。可能是什么问题?我如何解析 Uri 以获取文件。好像是版本相关的东西。

示例uri如下:

content://com.example.demo.provider/external_files/Camera/IMG_20171213_015646.jpg

How can i parse the Uri to get File

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