Mark
Mark

Reputation: 39881

View image in ACTION_VIEW intent?

I'd like to show a png or jpg I downloaded from the next in an image viewer intent, but can't get it to work.

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);

I know the bitmap is downloaded ok (use the same routine for supplying it my ImageView instances elsewhere in my app) - I think it wrote to file ok, I can see it on disk and the file size is correct. The intent is launched but an exception is thrown:

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

then the new activity just sits there, blank. How does this work?

Upvotes: 14

Views: 52462

Answers (2)

wuntee
wuntee

Reputation: 12470

Another problem may be permissions on the file. Typically your /data/data/[app]/ directories are not world readable, and are owned by you applications "app_XX" user/group. Either make sure your permissions are correct, or make sure the file is in a place that both applications can read (emms, or sd card)

Upvotes: 5

David Glass
David Glass

Reputation: 2384

Check out Android issue 2092 it sounds similar to what you are describing. The issue states, "Bitmap.compress() fails for PNG files saved in Indexed Color Mode (instead of RGB color mode)", however the first commenter thinks that, "it looks like its not an indexed color problem but a PNG problem."

It looks like your code is fine, compare it to this Android snippet:

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); 

Upvotes: 25

Related Questions