Просмотреть изображение в намерении 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-карта).