Android-如何将 android.net.Uri 对象转换为 java.net.URI 对象?
-
05-09-2019 - |
题
我正在尝试获得一个 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 toString
的Uri
方法在Java String
的URI
基于构造函数的组合。
android.net.Uri auri = new android.net.Uri(what ever);
java.net.URI juri = new java.net.URI(auri.toString());
其他提示
找到正确的方法来从内容URI打开的InputStream:
InputStream fileInputStream=yourContext.getContentResolver().openInputStream(uri);
这就是全部!
您原来的问题有一个解决方案(将 Uri 转换为 URI):
获取真实的文件路径(看这段代码: 从媒体存储中的 URI 获取文件名和路径)
使用真实路径和构造函数获取 URI:URI(字符串 uri)
如果您需要更多详细信息,请看这里:
我投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类,它确实做验证抛出异常。