Как открыть файл в 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