Android: правильная загрузка / сохранение почтового вложения - PullRequest
1 голос
/ 29 июля 2011

У меня есть интересная проблема: мое приложение предназначено для отправки и открытия zip, полного файлов, а zip имеет специальное расширение (проще для пользователя). Я могу заархивировать файлы, которые мне нужно прикрепить, по электронной почте и отправить их.

Когда я использую кнопку «Просмотр» и выбираю свое приложение, чтобы открыть файл, оно не распаковывает их правильно. Однако если я использую кнопку «скачать» gmail, а затем открываю файл через проводник, файл распаковывается правильно.

Это код, который я использую для загрузки вложения:

// get attachment
        try {
            attachment = getContentResolver().openInputStream(
                    getIntent().getData());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // Save it
        try {
            File root = Environment.getExternalStorageDirectory();
            path = root.getPath() + "/PSattachment.psz";
            savedFile = new File(path);
            FileOutputStream fos = new FileOutputStream(savedFile, false);
            BufferedOutputStream os = new BufferedOutputStream(fos);
            byte[] buffer = new byte[1024];
            int byteRead = 0;
            while ((byteRead = attachment.read(buffer)) != -1) {
                os.write(buffer, 0, byteRead);
            }
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

Я что-то не так делаю? Заранее спасибо. (Кроме того, процесс распаковки одинаков в обоих случаях [файловый менеджер и просмотр из электронной почты], поэтому я почти уверен, что он здесь что-то есть. Кроме того, файл загружается и имеет правильный размер. Он просто выиграл » t распаковать).

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Я нашел ответ !!! Потребовалось время, но, по крайней мере, теперь это работает:

            try {
            InputStream attachment = getContentResolver()
                    .openInputStream(getIntent().getData());
            savedFile = new File(Environment
                    .getExternalStorageDirectory().getAbsolutePath(),
                    "temp" + System.currentTimeMillis() + ".psz");
            FileOutputStream f = new FileOutputStream(savedFile);
            byte[] buffer = new byte[1024];
            int len1 = 0;
            while ((len1 = attachment.read(buffer)) > 0) {
                f.write(buffer);
            }
            f.close();
        } catch (Exception e) {
        }

Я использовал этот код для загрузки вложения, и теперь все работает отлично = D

0 голосов
/ 29 июля 2011

Проверьте это, пожалуйста: http://www.jondev.net/articles/Unzipping_Files_with_Android_(Programmatically)

Руководство по распаковке файлов в Android, надеюсь, это поможет решить вашу проблему

...