我目前正在为用户创建功能,以便将图像上传到我的服务器。他可以用相机或画廊拍照。 我使用此代码用相机拍照:
// create Intent to take a picture and return control to the calling application
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
tempFile = File.createTempFile(String.valueOf(System.currentTimeMillis()), ".jpeg", ContextCompat.getExternalCacheDirs(a)[0]);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
// start the image capture Intent
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
然后操纵我在onActivityResult上使用的图像:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// use tempFile to recreate bitmap and do some heavy-wooshy-wishy stuff
...
}
}
它完全正常,但在使用相机时我与Intent data
参数混淆了。在这种情况下它是null并且使用拍摄的图片我需要从我给...意图的路径重新创建它。
我觉得特别令人困惑的是,如果我没有放置任何EXTRA_OUTPUT参数,那么Intent data
不会为空,我可以轻松地使用{{1}获取图片的路径}。
但是我只是从原始图片中获得了一个缩略图。
有没有办法从相机和意图的路径获取原始图片?我没有任何真实的用例,但是当你拍摄照片时,我们会说data.getData()
字段会被修改或销毁。然后在onActivityResult上你将无法使用刚刚拍摄的照片。
答案 0 :(得分:1)
我觉得特别令人困惑的是,如果我没有输入任何EXTRA_OUTPUT参数,那么Intent数据不为空,我可以使用data.getData()轻松获取图片的路径。
一般情况下。 There is no requirement for ACTION_IMAGE_CAPTURE
to provide you a path to anything。如果您未提供data
,则通过EXTRA_OUTPUT
附加信息获取缩略图是您应该返回onActivityResult()
的唯一“结果”。
有没有办法从相机和意图路径获取原始图片?
不,因为你永远不会从Intent
获得路径。可能是一些相机应用程序泄露了这些信息。并非所有人都愿意。
但是让我们说当你拍照时,tempFile字段会被修改或销毁
不要犯那种错误是你的工作。例如,确保通过onSavedInstanceState()
在配置更改和短暂的流程终止中保留此值。