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

#android #email #file

#Android #Адрес электронной почты #файл

Вопрос:

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

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

Ответ №1:

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

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

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

Комментарии:

1. Это единственный способ сделать это? Я никак не могу прикрепить его к электронной почте напрямую из внутреннего хранилища?

Ответ №2:

Откуда вы знаете, что файл существует по интересующему вас пути? Можете ли вы просмотреть его с помощью 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);
  

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

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

Комментарии:

1. Я снова не получаю этот файл.