воскресенье, 18 апреля 2010 г.

Использование внешних приложений для отправки картинок или чего-нибудь еще

Для Sketcher понадобилось реализовать возможность отправки получившейся картинки через e-mail, MMS и прочих. Можно, конечно, реализовать свой отправщик почты/MMS/еще-чего-нибудь, но это - изобретение велосипеда. Лучше воспользоваться стандартным механизмом, который предоставляют т.н. Content Providers.



На примере отправки картинки, это реализуется очень просто:

1 File file; // допустим, есть некоторая картинка
2 Uri uri = Uri.fromFile(file);
3
4 Intent i = new Intent(Intent.ACTION_SEND);
5 i.setType("image/png");
6 i.putExtra(Intent.EXTRA_STREAM, uri);
7 // вот здесь создается новое окно со списком доступных приложений,
8 // которые могут обработать данный с типом "image/png"
9 startActivity(Intent.createChooser(i, "Send Image To:"));

Однако, есть некоторые нюансы. Во-первых, файл должен быть сохранен на диске, во-вторых, на нем должны стоять права, разрешающие чтение сторонними приложениями.

Есть и некоторые глюки. Например, у меня на телефоне картинка нормально отсылается через MMS, пикасой, т.е. всеми, кроме Gmail. Пока не знаю почему, но почему-то файл не доходит до него, а в логах logcat пишет что-то типа:

04-01 18:33:06.589: DEBUG/Gmail(4465): ComposeActivity added to
message:0 attachment:|asketch.png|image/png|0|image/png|LOCAL_FILE|file:///data/data/org.sketcher/files/asketch.png size:0
04-01 18:33:06.609: INFO/Gmail(4465): >>>>> Attachment uri:
file:///
data/data/org.sketcher/files/asketch.png
04-01 18:33:06.609: INFO/Gmail(4465): >>>>> type: image/png
04-01 18:33:06.609: INFO/Gmail(4465): >>>>> name: asketch.png
04-01 18:33:06.609: INFO/Gmail(4465): >>>>> size: 0


Думаю, что это только у меня такое, но буду думать почему так...

UPD: Оказалось, что нужно сохранять файлы на SD карте, чтобы сторонние приложения могли без проблем прочесть его (GMail в частности). Возможно, это глюк старых версий, т.к. на некоторых девайсах нет SD карты

1 комментарий: