在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
答案 0 :(得分:1)
我如何解析Uri以获取文件
你不是。而且,你不需要。您的文件是AppGlobal.getOutputMediaFile()
返回的内容。您需要保留该值(包括将其置于保存的实例状态Bundle
,以防您的进程在相机应用程序位于前台时终止)。有关如何将ACTION_IMAGE_CAPTURE
与FileProvider
一起使用,请参阅this sample app。