
Intent intent = new Intent(Intent.ACTION_PICK,androID.provIDer.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);startActivityForResult(intent,SELECT_IMAGE_FROM_galLERY);
在版本< 3.0没有问题. 使用3.0版和更高版本,当您获得本地映像时,onActivityResult方法中的意图包含一个Uri like …
content://media/external/images/media/XXX
但是当您选择一个picasa图像时,uri就像…
content://com.Google.androID.gallery3d.provIDer/picasa/item/XXXXXXXXXXXXXXXXXXXXX
我读了很多关于这个问题,我尝试了许多解决方法.
目前,我可以使用以下方式获取刚刚缓存的图像:
getContentprovIDer().openinputStream(uri)
问题是,当图像没有缓存时,openinputStream(uri)方法会抛出一个fileNotFoundException,我无法获取图像:_(
任何人知道如何获取文件或url下载文件或某事来获取图像?
谢谢!!
解决方法 正确的解决方案是使用 ACTION_GET_CONTENT.它的名称可能听起来不像 ACTION_PICK那么直观,但它是你应该用于你想要做的那个.ACTION_GET_CONTENT使用ACTION_GET_CONTENT选择图片而不是使用ACTION_PICK并指向ImageStore的URI提供者的原因是ACTION_GET_CONTENT得到很好的支持,而ACTION_PICK则不是. AndroID Framework工程师已经有mentioned几次了.
我学到了很难的方法.在找出这个之前,我不得不处理各种不一致之处.
与此相关的注释
您应该始终使用openinputStream通过ContentResolver获取文件,而不是尝试获取存储该文件的真实路径,而不使用URI.可能情况下,ContentProvIDer实现由云服务支持(Picasa的情况),或实现细节随时间而变化.
AndroID的内容提供商可以让您抽取数据的访问方式.试图找出文件所在的位置是我看到的常见错误.通常建议的是通过查询给定URI的DATA列来查找位置.根据使用的ContentProvIDer,它可能会返回不同的东西,甚至随着时间的推移而改变新版本.
通过使用openinputStream,您不必关心文件的位置,您只需接收字节流,并执行所需的 *** 作.这样一来,您就不会在其他应用程序(如Google Drive,DropBox等)中支持内容提供商,从而提供类似的选择界面来选择图像.
我知道OP正在使用openinputStream,但是其他的答案却暗示了它,这是我经常看到的.
总结以上是内存溢出为你收集整理的android – 从Gallery中检索非缓存的Picasa图像. 3.0和4.0全部内容,希望文章能够帮你解决android – 从Gallery中检索非缓存的Picasa图像. 3.0和4.0所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)