Как открыть файл на Android через Intent - программирование
Подтвердить что ты не робот

Как открыть файл на Android через Intent

как я могу открыть файл, который ранее был сохранен в "приватной" файловой системе? Файл загружается через webservice и должен храниться на локальных фсах. У меня возникла "странная" ошибка при попытке открыть файл через Intent (Action_View). Хотя файл присутствует в файловой системе (видел файл в проводнике файлов в эмуляторе /eclipse ), он не будет отображаться в запущенной запущенной работе галереи. Вместо изображения на галерее отображается черный экран, в котором нет содержания (кроме панели действий). То же самое происходит при попытке открыть файл 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();
    }
}           
4b9b3361

Ответ 1

При настройке местоположения на "openFileOutput("fileName", Activity.MODE_WORLD_READABLE)" он будет работать. Другие приложения не могут читать данные (даже для просмотра), хранящиеся при настройке на "Context.MODE_PRIVATE"

см. fooobar.com/questions/326353/...

Ответ 2

Какой тип вложения в вашем коде? Возможно, он возвращает неправильный тип пантомимы?

Этот код работает для меня:

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

Ответ 3

Вы не можете открывать файлы, которые не находятся на SD-карте. Вам нужно будет скопировать файл на SD-карту, а затем открыть его.