在ACTION_VIEW意图中查看图像?

13

我想在图像查看器意图中显示我从网上下载的 png 或 jpg,但无法使其工作。

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);
我知道位图已经下载好了(在我的应用程序的其他ImageView实例中使用相同的例程来提供它) - 我认为它已经成功写入文件了,我可以在磁盘上看到它,并且文件大小是正确的。Intent被启动了,但是抛出了一个异常:

ERROR/ImageManager(1345): got exception decoding bitmap java.lang.NullPointerException

然后这个新活动就一直停留在那里,什么也没有显示。这是怎么回事?

2个回答

25

请查看Android问题2092,它听起来与您所描述的类似。 该问题说明:“针对以索引颜色模式(而不是RGB颜色模式)保存的PNG文件,Bitmap.compress()失败”,然而第一位评论者认为,“看起来这不是索引颜色问题,而是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
如果我想要播放更多的视频,一个接一个地播放,如何实现按顺序播放视频?是否可以使用 intent(<视频链接数组> , "video/*"); - Anand Phadke
3
@andrewww,好问题,我认为你应该将其作为一个新问题提出。我不确定,但我相信这里肯定有人知道答案。然而,如果你只在评论中提问,他们可能永远都看不到它。 - David Glass

4
另一个问题可能是文件的许可权限。通常,“/data/data/[app]/”目录不是全局可读的,并且属于应用程序的“app_XX”用户/组。请确保您的权限设置正确,或者将文件放置在两个应用程序都可以读取的位置(例如emms或SD卡)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接