【问题标题】:Get image Uri in onActivityResult after taking photo?拍照后在onActivityResult中获取图像Uri?
【发布时间】:2011-06-30 21:23:56
【问题描述】:

我有这个代码:

startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), CAMERA_IMAGE);

这允许该用户拍照。现在我如何在onActivityResult 中获得那张照片的Uri?是Intent 额外的吗?是通过Intent.getData()吗?

【问题讨论】:

    标签: java android image camera uri


    【解决方案1】:
    protected void onActivityResult(int requestCode, int resultCode, Intent intent){
        Uri u = intent.getData();
    }
    

    顺便说一句...在某些设备中存在与此意图有关的错误。查看this answer 了解如何解决它。

    【讨论】:

    • 感谢您的解决方法。这是我遇到的主要问题。
    • 在 Android 4.4 中不起作用。运行代码时,Uri u is = null。
    • Uri u = intent.getData(); 是来自“数据”的缩略图。处理全尺寸图像需要更多的工作。来源:developer.android.com/training/camera/…
    • 这个有最新版本吗?因为它显示了一个错误。
    【解决方案2】:

    不仅要启动 Intent,还要确保告诉 Intent 您想要照片的位置。

    Uri uri = Uri.parse("file://somewhere_that_you_choose");
    Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    photoIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    startActivityForResult(photoIntent, CAMERA_IMAGE);
    

    然后,当您调用 onActivityResult() 方法时,如果成功,只需打开一个指向 URI 的流,它应该全部设置。

    【讨论】:

    • 这种方法的问题在于,在许多设备上,图像存储在库中由 EXTRA_OUTPUT 额外 AND 指定的位置。我个人在一些 HTC 和 LG 设备上看到过这种情况,但我知道还有其他人也有同样的问题......
    • 我认为您对画廊的运作方式存在误解。如果您在某些时候不删除照片,具体取决于您要求它保存的位置,它将在您的图库中显示为您手机上的另一张照片。如果您将 EXTRA_OUTPUT 的捆绑包值设置为您可以访问的沙盒文件夹,并且其中有一个名为“.nomedia”的空文件,则库不会扫描输出。
    • 这不是我看到的行为......许多设备上存在一个已知错误,导致我提到的重复保存。
    • 看看这里...它解释了问题,并且在错误跟踪器中还有一个指向错误的链接:stackoverflow.com/questions/1910608/…
    • 是的...查看我的链接是错误的帖子。我很难再次找到帖子。但我仍然对此进行了测试,并在我的 LG 手机和 HTC 手机上得到了我提到的结果。
    【解决方案3】:
    Uri uri = null;
    if(requestCode == GALLERY_INTENT && resultCode == RESULT_OK){
      uri = data.getData();
    }
    

    【讨论】:

      【解决方案4】:
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
          if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
      
                Bitmap photo = (Bitmap) data.getExtras().get("data");
                Uri fileUri = Utils.getUri(getActivity(), photo);
          }  
      }
      
      public String getRealPathFromURI (Uri contentUri) {
          String path = null;
          String[] proj = { MediaStore.MediaColumns.DATA };
          Cursor cursor = getActivity().getContentResolver().query(contentUri, proj, null, null, null);
          if (cursor.moveToFirst()) {
              int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
              path = cursor.getString(column_index);
          }
          cursor.close();
          return path;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-17
        • 1970-01-01
        相关资源
        最近更新 更多