2009-11-16 75 views
11

我想显示一个PNG或JPG,我从图像查看器的下一个目标下载,但无法让它工作。在ACTION_VIEW意图中查看图像?

Bitmap bmp = getImageBitmap(jpg); 
String path = getFilesDir().getAbsolutePath() + "/test.png"; 
File file = new File(path); 
FileOutputStream fos = new FileOutputStream(file); 
bmp.compress(CompressFormat.PNG, 100, fos); 
fos.close(); 

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(new File(path)), "image/png"); 
startActivity(intent); 

我知道位图下载OK(使用同样的程序在我的应用程序的其他地方提供它在我的ImageView的情况下) - 我认为它写的文件就OK了,我可以看到它在磁盘上的文件大小正确。这样做的目的是启动,但会抛出异常:

ERROR /的ImageManager(1345):有例外解码位图显示java.lang.NullPointerException

那么新的活动只是坐在那里,一片空白。这个怎么用?

回答

24

检查出Android issue 2092它听起来与您所描述的相似。该问题指出,“Bitmap.compress()在索引颜色模式(而不是RGB颜色模式)中保存的PNG文件失败”,但第一个评论者认为,“它看起来不像索引颜色问题,而是PNG问题。 “

它看起来像你的代码是好的,它比较这个Android片段:

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
File file = new File("/sdcard/test.mp4"); 
intent.setDataAndType(Uri.fromFile(file), "video/*"); 
startActivity(intent); 

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
File file = new File("/sdcard/test.mp3"); 
intent.setDataAndType(Uri.fromFile(file), "audio/*"); 
startActivity(intent); 
+1

如果我想一个一个地播放更多视频,另一种是可能的意图(<视频链接数组>,“视频/ *”); – andrewww 2013-04-18 06:47:43

+3

@andrewww伟大的问题,我想你应该问这是一个新的问题。我不确定,但我确定这里有人会知道。尽管他们在这个评论中永远不会看到它。 – 2013-04-22 21:31:29

4

另一个问题可能是对文件的权限。通常,您的/ data/data/[app] /目录不是全球可读的,并且由您的应用程序“app_XX”用户/组拥有。要么确保您的权限是正确的,要么确保文件位于两个应用程序都可以读取的地方(emms或sd卡)