我正在尝试获得一个 FileInputStream 用户从图片库中选择的图像上的对象。这是安卓的 URI 由返回 android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI

content://media/external/images/media/3

当我尝试从该对象构造一个 java URI 对象时,我得到一个 IllegalArgumentException 与异常描述 URI 中的预期文件方案:内容://媒体/外部/图像/媒体/3 而 android URI 显示方案为 内容

更新:从未找到原始问题的解决方案。但是,如果您想要图片库中图像的字节流,这段代码就可以做到。

Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());
有帮助吗?

解决方案

您可以使用android toStringUri方法在Java StringURI基于构造函数的组合。

android.net.Uri auri = new android.net.Uri(what ever);
java.net.URI juri = new java.net.URI(auri.toString());

的Android URI 的| 爪哇URI

其他提示

找到正确的方法来从内容URI打开的InputStream:

InputStream fileInputStream=yourContext.getContentResolver().openInputStream(uri);

这就是全部!

您原来的问题有一个解决方案(将 Uri 转换为 URI):

  1. 获取真实的文件路径(看这段代码: 从媒体存储中的 URI 获取文件名和路径)

  2. 使用真实路径和构造函数获取 URI:URI(字符串 uri)

如果您需要更多详细信息,请看这里:

如何删除使用 ACTION_VIDEO_CAPTURE 的 Intent 录制的视频?

我投jgilrincon的答案。我不能因低信誉发表评论,并在这里不用一些额外的信息 - 你可以使用的 FileHelper.java Apache的科尔多瓦项目,它有你需要的文件从URI字符串处理函数,考虑mediastore以及(和应用资源,文件夹)

特别地该方法从提供的Uri的InputStream:

public static InputStream getInputStreamFromUriString(String uriString, Activity cordova)

由于字符串构建不起作用你尝试过只是它构建你自己?

android.net.URI auri = new android.net.URI(what ever);
java.net.URI juri = new java.net.URI(auri.getSchema(),
                                     auri.getSchemaSpecificPart(),
                                     auri.getFragment());

您可能还需要仔细检查你获得有效数据进行Android的URI类的。正如我在其他的答案中列出的文档讨论如何做几乎没有错误检查。如果有逸岸错误类刚刚吐出来的垃圾不管怎样,不会引发任何异常。其中,很有可能是为什么在Java类,它确实做验证抛出异常。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top