在牛轧糖中从相机捕获图像并从 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_CAPTURE
与 FileProvider
一起使用。
在 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_CAPTURE
与 FileProvider
一起使用。