我遵循了this,this或this之类的教程,内容涉及如何使用FileProvider用相机拍摄照片并将其存储在临时文件中以供以后上传。 / p>
他们都生成一个文件,使用文件提供程序获取uri,然后使用此uri调用CAmera意图:
val intent = Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
if (uri != null) {
try {
if (intent.resolveActivity(activity.packageManager) != null) {
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri)
activity.startActivityForResult(intent, resultCode)
}
} catch (t: Throwable) {
Timber.e(t, t.message)
}
}
然后在onActivityResult
上,他们使用以下方法获取图像:
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE) {
//don't compare the data to null, it will always come as null because we are providing a file URI, so load with the imageFilePath we obtained before opening the cameraIntent
Glide.with(this).load(imageFilePath).into(mImageView);
// If you are using Glide.
}
}
因此引用本教程“加载在打开cameraIntent之前获得的imageFilePaht”。
在大多数情况下都可以使用,但是当我出于某种原因尝试使用模拟器时,启动相机应用程序时,我的活动被破坏了(可能是内存不足),当我从相机回来时,我对Uri的引用为空。
我可以从活动结果中检索此Uri吗?还是我真的必须将其存储在sharedpreferences或类似的文件中?
答案 0 :(得分:1)
当我从相机回来时,我对Uri的引用为空
将Uri
保存在已保存的实例状态Bundle
中,无论任何活动或片段正在调用startActivity()
来启动ACTION_IMAGE_CAPTURE
应用。有关执行此操作的ACTION_IMAGE_CAPTURE
请求的完整实现,请参见this sample app。