Я тестирую создание файла .txt, а затем отправляю его в виде вложения электронной почты с помощью намерения.Android, .txt Вложение электронной почты не отправляется с помощью намерения
Создание .txt файла
try {
String fileName = "testFileName.txt";
File root = new File(Environment.getExternalStorageDirectory(), "testDir");
if (!root.exists()) {
root.mkdirs();
}
File gpxfile = new File(root, fileName);
FileWriter writer = new FileWriter(gpxfile);
writer.append("Testing email txt attachment.");
writer.flush();
writer.close();
sendEmail(gpxfile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
Отправка по электронной почте
protected void sendEmail(String fileName){
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_SUBJECT, "Test subject");
i.putExtra(Intent.EXTRA_TEXT, "This is the body of the email");
i.putExtra(Intent.EXTRA_STREAM, Uri.parse(fileName));
try {
startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
}
И все это, кажется, работает хорошо. Он открывает почтовый клиент, с предметом, телом и крепления всех видимых
И посылает просто отлично, указывая есть вложение
Но когда я открываю Gmail, нет крепления показано
Sam е история, когда я просмотреть сообщение электронной почты
и просмотр электронной почты по телефону, внутри «Отправленные» папку, также не показывает никакой привязанности
код является копией и вставлять из нескольких разных сообщений в SO, и, похоже, у них нет никаких проблем. Где идет файл? Он остановлен gmail? Или вообще не отправлять? Не существует ли файл?
Примечание: У меня есть <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
, установленный в манифесте.
Заранее спасибо.
Вместо создания 'FileWriter' на' File', создать 'FileWriter' из' FileOutputStream' на ' File'. Затем между вашими вызовами 'flush()' и 'close()' в 'FileWriter', вызовите' getFD(). Sync() 'в' FileOutputStream'. Это блокирующий вызов и не будет возвращаться, пока все байты не будут записаны на диск. Посмотрите, поможет ли это. Также обратите внимание, что 'ACTION_SEND' поддерживает' EXTRA_TEXT' или 'EXTRA_STREAM' для' Intent', а не оба одновременно, поэтому не удивляйтесь, если некоторые приложения игнорируют тот или иной. – CommonsWare
@CommonsПожалуйста, спасибо за ввод. Я опубликовал решение, которое сработало для меня - это была просто проблема с этим путем. И спасибо за подсказку на ACTION_SEND. В [Android Docs] (https://developer.android.com/training/basics/intents/sending.html) есть и то, и другое, и как я могу обеспечить, чтобы оба они были включены? – Birrel
«В Android-документы включены оба» - вздох. Я буду работать, чтобы установить это. Цитирование [реальных документов] (http://developer.android.com/reference/android/content/Intent.html#ACTION_SEND): «getType() - это тип MIME отправляемых данных.get * Extra может иметь поле EXTRA_TEXT или EXTRA_STREAM, содержащее данные для отправки. Если используется EXTRA_TEXT, тип MIME должен быть «text/plain»; в противном случае это должен быть тип данных MIME в EXTRA_STREAM. » – CommonsWare