【问题标题】:Get path of image from intent when using camera and putting EXTRA_OUPUT parameter使用相机并输入EXTRA_OUPUT参数时从意图中获取图像路径
【发布时间】:2016-01-06 14:29:26
【问题描述】:

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

// 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 参数感到困惑。在这种情况下,它是空的,要使用拍摄的照片,我需要从我给 ... 意图的路径重新创建它。

我觉得特别困惑的是,如果我不放任何 EXTRA_OUTPUT 参数,那么Intent data 不为空,我可以通过data.getData() 轻松获取图片的路径。

但是我只是从原始图片中得到一个缩略图。

有没有办法从相机中获取原始图片和意图中的路径?我没有任何真正的用例,但假设tempFile 字段在您拍照时被修改或破坏。然后在 onActivityResult 上,您将无法使用刚刚拍摄的照片。

【问题讨论】:

    标签: android android-intent android-camera


    【解决方案1】:

    我特别困惑的是,如果我不放任何EXTRA_OUTPUT参数,那么Intent数据不为空,我可以很容易地用data.getData()获取图片的路径。

    一般不会。 There is no requirement for ACTION_IMAGE_CAPTURE to provide you a path to anything。如果您不提供EXTRA_OUTPUT,则通过data 额外获取缩略图是您应该在onActivityResult() 中获取的唯一“结果”。

    有没有什么办法可以从相机中获取原始图片以及从意图中获取路径?

    不,因为您永远无法从Intent 获得路径。可能是一些相机应用程序泄露了这些信息。并非所有人都会。

    但是假设 tempFile 字段在您拍照时被修改或销毁

    不犯这种错误是你的职责。例如,确保您通过onSavedInstanceState() 在配置更改和短期进程终止时保留此值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2013-08-13
      相关资源
      最近更新 更多