Просмотреть изображение в намерении ACTION_VIEW?

Я хочу показать 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 в другом месте моего приложения). Я думаю, что он написал файл в порядке, я вижу его на диске, и размер файла правильный. Запущен запуск, но исключение вызывается:

ERROR/ImageManager (1345): получил растровое декодирование декодирования java.lang.NullPointerException

тогда новая активность просто сидит там, пустая. Как это работает?

Ответ 1

Отъезд Android-вопрос 2092, это похоже на то, что вы описываете. Проблема заключается в том, что "Bitmap.compress() не работает для файлов PNG, сохраненных в режиме индексированного цвета (вместо режима цвета RGB)", однако первый комментатор считает, что "похоже, что это не проблема с индексированным цветом, а проблема с 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); 

Ответ 2

Другой проблемой может быть разрешение на файл. Обычно ваши/data/data/[app]/каталоги не читаются в мире и принадлежат вашим приложениям "app_XX" user/group. Либо убедитесь, что ваши разрешения правильные, либо убедитесь, что файл находится в месте, которое могут считывать оба приложения (emms или SD-карта).