Android - 获取刚拍摄的照片的URI(无需再次保存图像)

3

我发现有很多类似我的问题的答案,但它们对我来说都不太合适。让我解释一下。

我有一个ImageButton,让用户拍照并在界面上显示图片。当我尝试获取图像URI时,它返回null:

Uri uri = data.getData(); 

我在互联网上做了一些搜索,发现了一些解决方案,例如:

@Override
public void onActivityResult(int requestCode, int resultCode,
        Intent data) {
    try {
        if (resultCode == Activity.RESULT_OK) {
            updateProfilePicure = Boolean.TRUE;
            switch(requestCode){
                case 0:
                    Bundle extras = data.getExtras();
                    Object xx = data.getData();
                    Bitmap imageBitmap = (Bitmap) extras.get("data");
                    Uri tempUri = getImageUri(imageBitmap);
                    imageView.setImageBitmap(imageBitmap);
                    break;
                default: break;
            }
        }
    } catch(Exception e){
        e.printStackTrace();
    }
}

public Uri getImageUri(Bitmap inImage) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(
            ApplicationContext.getInstance().getContext().getContentResolver(), inImage,
   "Title", null);
    return Uri.parse(path);
}   

对我而言,这没有意义,因为当调用方法onActivityResult()时,图片已经保存在DCIM文件夹中,没有再次保存的理由。那么为什么我要使用它呢?

有没有其他方法可以检索从拍摄的图像获取URI的方式?

提前感谢。


1
那要看情况。如果在启动相机意图时没有添加文件,则不会获得文件URI,而“data”将返回位图。 - inmyth
1个回答

4
这张照片已经保存在DCIM文件夹中,没有任何理由再次保存它。
并非如此。引用 ACTION_IMAGE_CAPTURE文档的说法:
调用者可以传递额外的 EXTRA_OUTPUT 来控制图像写入的位置。如果不存在 EXTRA_OUTPUT,则会将小尺寸图像作为 Bitmap 对象返回到额外的区域。
(这里的“额外字段”是一个键为 data 的额外字段)
你所贴的代码片段正在检索数据附加项,因此图像不会存储在任何地方。
在第一个代码片段中,您已经有了检索捕获图像 URI 的另一种方法--如果您在 ACTION_IMAGE_CAPTURE 请求中指定 Uri 作为 EXTRA_OUTPUT,那么您将在传递给 onActivityResult() 的 Intent 中获得指向所拍摄图像的 Uri。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接