我可以使用ACTION_VIEW查看我下载的JPG吗?

时间:2011-01-25 07:54:40

标签: android

我正在尝试查看我在Android应用中使用ACTION_VIEW下载的JPG文件。我可以验证文件是否存在以及文件大小是否正确。我可以从模拟器中提取文件并在我的计算机上打开它,所以我知道JPG没有损坏。我还尝试了View image in ACTION_VIEW intent?中的代码。

我的代码如下:

// start intent to view the file  
String filename = "test.jpg"
String downloadsDirectoryPath = getFilesDir().getPath() + "/downloads";  
File file = new File(downloadsDirectoryPath + "/" + filename);

Intent i = new Intent();  
i.setAction(Intent.ACTION_VIEW);  
i.setDataAndType(Uri.fromFile(file), "image/*");    
startActivity(i);

这似乎应该是直截了当的,但每当我运行上面的代码时,我都会

ERROR/UriImage(336): got exception decoding bitmap  
ERROR/UriImage(336): java.lang.NullPointerException
ERROR/UriImage(336):     at com.android.camera.Util.makeInputStream(Util.java:336)
ERROR/UriImage(336):     at com.android.camera.Util.makeBitmap(Util.java:307)
ERROR/UriImage(336):     at com.android.camera.Util.makeBitmap(Util.java:299)
ERROR/UriImage(336):     at com.android.camera.gallery.UriImage.fullSizeBitmap(UriImage.java:94)
ERROR/UriImage(336):     at com.android.camera.gallery.UriImage.fullSizeBitmap(UriImage.java:86)
ERROR/UriImage(336):     at com.android.camera.gallery.UriImage.thumbBitmap(UriImage.java:120)
ERROR/UriImage(336):     at com.android.camera.ImageGetter$ImageGetterRunnable.executeRequest(ImageGetter.java:173)
ERROR/UriImage(336):     at com.android.camera.ImageGetter$ImageGetterRunnable.run(ImageGetter.java:149)
ERROR/UriImage(336):     at java.lang.Thread.run(Thread.java:1096)

关于这里发生了什么的任何想法?

2 个答案:

答案 0 :(得分:0)

据我所知,通过查看平台源代码,您将在URI中传入一个不存在的文件路径。

downloadsDirectoryPath的价值是什么?打赌你15个代表点,它不是完全合格的......

答案 1 :(得分:0)

斯科特在评论中回答了他自己的问题,但我会将其作为答案重新发布,因为它对我也有帮助:检查图像上的文件权限。我还拉了.jpg来验证它没问题,但真正的问题是FileOutputStream()默认设置了权限,因此ACTION_VIEW无法访问该文件。 (我个人认为这是一个错误,在查看器中它是段错误而不是记录缺少读取文件的权限,但我离题了......)

根据Scott的建议,使用openFileOutput(“test.jpg”,MODE_WORLD_READABLE)代替FileOutputStream()可以解决问题。

更好的解决方案(取决于应用程序)可能使用以下方法之一:

http://developer.android.com/guide/topics/data/data-storage.html#filesExternal