Android: можно прикрепить файл к электронной почте без записи на SD?

Мое приложение хранит данные локально в родной SQLite db, и я хочу разрешить пользователям экспортировать эти данные, отправив им сам файл CSV. Для этого я генерирую .csv из базы данных и записываю ее на SD-карту, а затем прикрепляя ее к электронному письму:

StringBuilder csv = generateFile();
writeFile(csv.toString(),"file.csv");
Intent email = new Intent(android.content.Intent.ACTION_SEND);
email.setType("application/octet-stream");
email.putExtra(android.content.Intent.EXTRA_STREAM, Uri.parse("file://sdcard/file.csv"));

Все отлично работает. Однако мне интересно, возможно ли сначала пропустить шаг записи в SD и напрямую прикрепить данные.

Ответ 1

Даже если это возможно, я рекомендую против него.

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

Кроме того, Intents копирует между процессами справедливый бит как часть этого. Например, клиент электронной почты будет работать в другом процессе, чем ваше приложение.

Для обеих этих причин вам нужно сохранить свой Intents маленький. Единственной альтернативой Uri для контента было бы иметь содержимое непосредственно в дополнительном файле... и что файл CSV предположительно мог бы стать большим.