Невозможно добавить файл из внутреннего хранилища как вложение электронной почты - PullRequest
3 голосов
/ 14 апреля 2011

Я создаю файл во внутреннем хранилище (/ data / data / package_name / myfile_name), я хочу отправить этот файл с вложением, но я получаю пустой файл во вложении (хотя я проверил этот файл из проводника,файл присутствует и не пуст в том же месте).

И тот же код работает хорошо, когда я использовал внешнее хранилище (я получаю свой фактический файл во вложении).Есть ли какие-то ограничения, что мы не можем отправить файл, который присутствует во внутренней памяти?Или другие шаги, которые я пропускаю?

Ответы [ 2 ]

5 голосов
/ 14 апреля 2011

Я предполагаю, что вы пытаетесь отправить файл как вложение электронной почты, используя намерения.

Причина, по которой файл пуст, заключается в том, что приложение электронной почты не имеет доступа к файлу в /data/data/package_name/myfile_name из-за модели безопасности Android (каталог /data/data/package_name является частным для вашего приложения).

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

1 голос
/ 14 апреля 2011

Откуда вы знаете, что файл существует по интересующему вас пути?Можете ли вы просмотреть его с помощью DDMS или ADB после того, как ваше приложение сохранило его там?Какой код вы используете для сохранения / чтения файла?Возможно, я смогу предоставить более конкретную помощь с этой информацией.

Метод, используемый для получения каталога внутренней памяти на любом данном устройстве, - Context.getFilesDir().Чтобы создать ссылку на файл с именем «myfile.dat», например:

File myFile = new File(getFilesDir(),"myfile.dat");

Предполагается, что вы вызываете код из действия или другого контекста.Чтобы прикрепить этот файл к электронному письму, вы должны передать Uri в это место в качестве дополнительного, поэтому давайте добавим создание этого к примеру:

File myFile = new File(getFilesDir(),"myfile.dat");
Uri fileUri = Uri.fromFile(myFile);

Это все при условии, чтофайл был правильно сохранен во внутреннем хранилище.

Надеюсь, что поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...