我的设备(Nexus s)中安装了this个应用程序。 如果您使用此应用程序,它会缓存一些图像。这就是它在我的设备库中显示缓存图像的原因。
我使用光标来获取路径
final String[] columns = { MediaStore.Images.Media.DATA };
Cursor imagecursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns,
MediaStore.Images.Media._ID + " = " + id, null, MediaStore.Images.Media._ID);
if (imagecursor != null && imagecursor.getCount() > 0){
imagecursor.moveToPosition(0);
String path = imagecursor.getString(imagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
Log.d("path", path);
File f = new File("file://" + path);
Log.d("check_file", "" + f.exists());
}
我得到了路径:
/mnt/sdcard/cache/hk.ignition.podcast/cartoon/2/http%3A%2F%2Fbigcity.learnenglishapps.com%2Fimages%2Fcartoons%2Fset2%2Ffast-food-new-1.png
下载的图片是: http://bigcity.learnenglishapps.com/images/cartoons/set2/fast-food-new-1.png
当我拉动文件或使用像Astro这样的文件管理器进行探索时,它就在那里。
但是,当我检查文件是否存在时,它会显示false
。
有任何角色问题吗?
更新
删除file://
以检查文件是否存在。
接下来,我想在图库中打开该文件。
Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType( Uri.parse("file:///mnt/sdcard/cache/hk.ignition.podcast/cartoon/2/http%3A%2F%2Fbigcity.learnenglishapps.com%2Fimages%2Fcartoons%2Fset2%2Ffast-food-new-1.png"), "image/*"); startActivityForResult(intent, 3);
content://
样式路径?更新2:
解决使用:
Uri.fromFile(f);
而不是Uri.Parse()
。因为它从编码格式构建/
字符。
答案 0 :(得分:2)
将new File("file://" + path)
更改为new File(path)