Каждый пример, который я читал для отправки снимка экрана по электронной почте в Android, включает в себя сначала сохранение растрового изображения на SD-карту, а затем ссылку на изображение позже, чтобы отправить его по электронной почте. Есть ли способ, которым я могу отправить скриншот, не сохраняя его сначала на телефоне?
Android: как отправить снимок экрана по электронной почте, не сохраняя его на SD-карту?
Ответы (1)
Вы можете попробовать создать поток ContentProvider
, который использует конвейер, а не файл, для ParcelFileDescriptor
, возвращаемого openFile()
. Ваш провайдер предоставит скриншот из кучи, записывая в OutputStream
, который вы получаете с вашего конца канала. Затем вы должны передать Uri
потоку вашего провайдера в дополнительном EXTRA_STREAM
для вложения. Этот пример приложения иллюстрирует технику, хотя в моем случае я чтение в файл для записи в OutputStream
.
Это немалая работа, и она может быть несовместима со всеми почтовыми клиентами. Например, ваш поток на основе конвейера не доступен для поиска, и клиенты могут подумать, что они могут искать в потоке, чтобы перемотать, чтобы повторно прочитать в различных битах. Также помните, что вам все равно нужно будет преобразовать Bitmap
скриншота в файл PNG.
Если вас беспокоит наличие файла во внешнем хранилище, запишите снимок экрана во внутреннее хранилище и используйте FileProvider
для его обслуживания. Этот пример приложения похож на предыдущий и иллюстрирует использование из FileProvider
.
первое сохранение растрового изображения на SD-карту
Приблизительно ноль примеров продемонстрирует это как съемное хранилище недоступен разработчикам. Эти примеры, вероятно, демонстрируют запись во внешнее хранилище. .
FileProvider
для его обслуживания. Вы можете иметь файл в getCacheDir()
, который является частью вашего внутреннего хранилища, из которого FileProvider
может обслуживать.
- person CommonsWare; 28.07.2015
ACTION_SEND
?ACTION_SENDTO
? JavaMail? Что-то другое? - person CommonsWare   schedule 28.07.2015