2013-11-09 2 views
2

Я работаю над небольшим приложением, где вы можете отправить электронное письмо с прикрепленным файлом. Когда сообщение отправляется, файл необходимо удалить. Я начинаю задание по электронной почте, используя startActivityForResult(emailIntent) и получаю ответ в onActivityResult(). Проблема заключается в том, что onActionResult() вызывается сразу после нажатия кнопки отправки в почтовом клиенте, а не при отправке письма. Я также читал, что ACTION_SEND не предназначен для вас с startActivityForResult(). Итак, вопрос в том, когда/как удалить файл? Я думал, что могу запустить Thread, который будет проверять, не используется ли файл каким-либо другим процессом, а затем удалить его. Проблема может заключаться в том, что приложение уничтожается, поток уничтожается и файл никогда не будет удален. Итак, как насчет запуска какого-то Service, который будет ждать, пока файл может быть удален, а затем убить себя. Что было бы лучшим решением?Как удалить файл

+0

deleteOnExit() - этот файл автоматически удаляется, если виртуальная машина заканчивается нормально. Итак, когда файл действительно нужно удалить? Обратите внимание, что на Android жизненный цикл приложения не включает завершение VM, поэтому вызов этого метода не гарантирует, что файлы будут удалены. – Husky

ответ

1

Когда электронное письмо отправлено, файл необходимо удалить.

Это будет невозможно, так как вы не можете узнать, когда отправлен файл.

Я начинаю задание по электронной почте, используя startActivityForResult (emailIntent) и получаю ответ в onActivityResult().

ACTION_SEND не предназначен для использования с startActivityForResult(), и даже если бы это было, нет никакой гарантии, что, когда onActivityResult() называется, что письмо действительно было отправлено. У вас нет способа узнать, отправлено ли электронное письмо. Например, почтовый клиент может просто поставить в очередь отправленное электронное письмо, потому что нет подключения к Интернету или настройки электронной почты настроены таким образом, что он отправляет электронные письма партиями или что-то еще.

Вопрос в том, когда/как удалить файл?

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

Я думал, что могу запустить Thread, который будет проверять, не используется ли какой-либо другой процесс, а затем удалить его.

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

А как насчет запуска какой-либо службы, которая будет ждать, пока файл не будет удален, а затем убьет самого себя.

Опять же, у вас нет способа узнать, когда файл можно удалить. 24 часа - это предположение; возможно, что электронная почта все еще может быть поставлена ​​в очередь, а другому приложению может потребоваться вложение. Тем не менее, политика, основанная на времени, является наименее недопустимым предположением, которое вы можете сделать, а также облегчает пользователям настройку того, как долго будет сохраняться файл перед его удалением.

+0

Да, вы правы. Но давайте предположим, что файл является снимком, сделанным с пользовательской камеры, и его единственная цель - быть «живой», пока она не будет отправлена, и на основе требований она должна быть удалена. Единственный вариант, который выглядит удобно, как вы сказали, - удалить файл через 24 часа + - и надеяться, что он был отправлен. Что делать, если телефон отключен в течение этих 24 часов? Я думаю, что письмо удалено из очереди и никогда не предназначено для отправки снова, но изображение сохраняется там. – Husky

+0

@ Husky: «Что делать, если телефон был отключен в течение этих 24 часов? Я думаю, что электронное письмо удаляется из очереди и никогда не предназначено для отправки снова, но изображение сохраняется там» - поскольку телефон выключен, никто должен заботиться, и вы ничего не можете с этим поделать, поскольку телефон выключен и ваш код не может работать. Вы можете использовать 'AlarmManager' для запуска процесса удаления, и вы также можете проверить, что файлы также будут удалены при загрузке (для покрытия сценария« выключено »). – CommonsWare

+0

@Husky: Кроме того, ваши «требования», вероятно, будут диктовать, что вы не можете использовать 'startActivity()' для отправки электронной почты. Вместо этого вам нужно будет загрузить файл на свой сервер и отправить его оттуда, или вам понадобится использовать JavaMail (или его эквивалент), чтобы отправить его непосредственно самостоятельно. 'ACTION_SEND' и' ACTION_SENDTO' предназначены для более случайного использования и могут не соответствовать всем «требованиям». – CommonsWare

Смежные вопросы