使用相机并输入EXTRA_OUPUT参数时,从意图中获取图像路径

时间:2016-01-06 14:29:26

标签: android android-intent android-camera

我目前正在为用户创建功能,以便将图像上传到我的服务器。他可以用相机或画廊拍照。 我使用此代码用相机拍照:

// 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上你将无法使用刚刚拍摄的照片。

1 个答案:

答案 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()在配置更改和短暂的流程终止中保留此值。