Всеки пример, който съм чел за изпращане на екранна снимка по имейл в 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