Android-如何将android.net.Uri对象转换为java.net.URI对象?
谢谢你的帮助。
我想获得一个FileInputStream对象的图片,用户从图片库中select。 这是android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI返回的android URI
内容://媒体/外部/图像/媒体/ 3
当我尝试从这个对象构造一个java URI对象时,我得到一个IllegalArgumentExceptionexception描述URI:content:// media / external / images / media / 3中的Expected file scheme,而android URI显示scheme为内容
从来没有find原来的问题的解决scheme。 但是,如果你想在图片库中的图像的字节stream,这段代码将做到这一点。
Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri); ByteArrayOutputStream bytes = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes); ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());
您可以将基于String
的Java URI
构造函数与android Uri
的toString
方法结合使用。
android.net.Uri auri = new android.net.Uri(what ever); java.net.URI juri = new java.net.URI(auri.toString());
Android URI | Java URI
find从内容URI打开InputStream的正确方法:
InputStream fileInputStream=yourContext.getContentResolver().openInputStream(uri);
就这样!
有一个解决您的原始问题(转换URI到URI):
-
获取真正的文件path(看这个代码: 从mediastore的URI获取文件名和path )
-
使用真实path和构造函数获取URI:URI(String uri)
如果您需要更多的细节,请看这里:
如何用ACTION_VIDEO_CAPTURE删除使用Intent录制的video?
我投了jgilrincon的回答。 我不能评论由于低信誉,这里有一些额外的信息 – 你可以使用Apache Cordova项目中的FileHelper.java ,它具有你需要从Uristring处理文件的function,考虑到mediastore(以及app资源文件夹)
特别是这个方法提供了来自Uri的InputStream:
public static InputStream getInputStreamFromUriString(String uriString, Activity cordova)
由于string构造不起作用,你试图只是构build你自己?
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类中获取有效数据。 在我的其他答案中列出的文档讨论它几乎没有错误检查。 如果实际上有一个错误,这个类只是吐出垃圾,不会抛出任何exception。 这很可能是为什么做validation的java类抛出一个exception。
- android.os.NetworkOnMainThreadException与android 4.2
- 我应该在长时间运行的AsyncTask中使用getApplicationContext或Activity.this
- 确定Android应用程序是否是第一次使用
- Android 4.0模拟器上的Google Play
- 如何在android应用程序中保存数据
- 如何覆盖在Android操作栏后退button?
- android.widget.Switch – 开/关事件监听器?
- Google Map Api v2在日志中显示“V / GoogleSignatureVerifier:签名无效”错误消息
- …你在AndroidManifest.xml中声明了这个活动吗?