#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. Я снова не получаю этот файл.