Как открыть файл в Android через Intent
Как открыть файл, который ранее хранился в файловой системе "privat"? Файл загружается веб-сервисом и должен храниться на локальной fs. Я получил" странную " ошибку при попытке открыть файл через Intent (Action_View). Хотя файл присутствует в файловой системе (видел файл в проводнике в эмуляторе/eclipse), он не будет отображаться в вызывающем действии galery, которое запускается. Вместо картинки в галерее отображается черный экран с не содержимым там (кроме панели действий). То же самое происходит при попытке открыть файл pdf/movie/mp3 с помощью этого метода (pdf говорит, например, что файл поврежден).
BTW: данные, которые были сохранены на локальной fs, действительны (не повреждены), я загрузил файлы из отладчика (с помощью метода pull), и файлы могут быть открыты на моей рабочей станции...
public void onAttachment(Context context, Attachment attachment) {
try {
//Attachment is a structured data object that contains of a byte[], filename and mimetype (like image/jpeg)
FileOutputStream fos = FileOutputStream fos = context.openFileOutput(attachment.getAttachmentFileName(), Context.MODE_PRIVATE);
fos.write(attachment.getBinary());
fos.flush();
fos.close();
File f = context.getFileStreamPath(attachment.getAttachmentFileName());
Uri uri = Uri.fromFile(f);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri,attachment.getAttachmentMimetype());
context.startActivity(intent);
} catch (IOException e) {
e.printStackTrace();
}
}
3 ответов
какой тип вложения в вашем коде? Возможно, он возвращает неправильный тип MIME?
этот код работает для меня:
File file = new File("EXAMPLE.JPG");
// Just example, you should parse file name for extension
String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(".JPG");
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), mime);
startActivityForResult(intent, 10);
вы не можете открыть файлы, которые не находятся на sdcard, как это. Вам нужно скопировать файл на sdcard, а затем открыть его.
при установке местоположения в "openFileOutput("fileName", Activity.MODE_WORLD_READABLE)
" Это будет работать. Другие приложения не могут читать данные (даже для просмотра), хранящиеся при установке на "Context.MODE_PRIVATE
"
посмотреть другой пост на stackoverflow