Принятый ответ не работает на 4.1.2. Это должно работать на всех платформах:
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto","abc@gmail.com", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Body");
startActivity(Intent.createChooser(emailIntent, "Send email..."));
Надеюсь, это поможет.
Обновление: Согласно marcwjj , кажется, что на 4.3 нам нужно передать массив строк вместо строки для адреса электронной почты, чтобы он работал. Возможно, нам понадобится добавить еще одну строку:
intent.putExtra(Intent.EXTRA_EMAIL, addresses); // String[] addresses
ОБНОВЛЕНИЕ: этот вопрос послужил источником вдохновения для этого сообщения в блоге; см. его для получения дополнительной информации.
http://ericlippert.com/2009/08/13/four-switch-oddities/
Спасибо за интересный вопрос.
Существует ряд недоразумений и ошибок. утверждения в различных других ответах, ни один из которых на самом деле не объясняет, почему это незаконно. Я попытаюсь быть окончательным.
Во-первых, чтобы быть точным, «масштаб» - неправильное слово для описания проблемы. По совпадению, на прошлой неделе я написал в блоге сообщение об этом точном неправильном использовании слова «scope»; который будет опубликован после моей серии статей о блоках итераторов, которые будут проходить в течение июля.
Правильный термин: « пространство объявлений ». Пространство объявлений - это область кода, в которой нельзя объявить две разные вещи с одинаковыми именами . Описанный здесь сценарий является симптомом того факта, что секция коммутатора не определяет пространство объявлений, хотя блок коммутатора определяет. Поскольку два объявления OP находятся в одном пространстве объявлений и имеют одинаковое имя, они являются незаконными.
(Да, блок переключателей также определяет область действия, но этот факт не имеет отношения к вопросу, потому что вопрос касается законности объявления , а не семантика поиска идентификатора .)
Резонный вопрос: «Почему это незаконно?» Разумный ответ - «ну с чего же»? Вы можете получить это одним из двух способов. Либо это допустимо:
switch(y)
{
case 1: int x = 123; ... break;
case 2: int x = 456; ... break;
}
, либо допустимо:
switch(y)
{
case 1: int x = 123; ... break;
case 2: x = 456; ... break;
}
, но вы не можете получить оба способов. Разработчики C # выбрали второй способ, который казался более естественным.
Это решение было принято 7 июля 1999 г., всего десять лет назад. Комментарии в примечаниях того дня очень краткие, просто заявляя: « Switch-case не создает свое собственное пространство объявлений », а затем даем пример кода, который показывает, что работает, а что нет.
Чтобы узнать больше о том, что было в головах дизайнеров в этот день, я мне приходилось беспокоить многих людей о том, что они думали десять лет назад, и беспокоить их о том, что в конечном итоге является тривиальной проблемой; Я не собираюсь этого делать.
Короче говоря, не существует особенно веских причин для выбора того или иного пути; оба имеют достоинства. Команда разработчиков языка выбрала один путь, потому что они должны были выбрать один; тот, который они выбрали, кажется мне разумным.
А, вы не провалились, но вы можете использовать goto для перехода к другому помеченному блоку case. Следовательно, блоки должны быть в одном объеме.
Вы также можете:
case x:
{var someVariable = 42;}
break;
case y:
{var someVariable = 40;}
break;
По сути, фигурные скобки создают лексическую область видимости, поэтому без фигурных скобок someVariable загружается в таблицу символов дважды. Я считаю, что этот выбор, вероятно, сделан просто для того, чтобы избежать путаницы и, возможно, чтобы не усложнять построение таблицы символов.
Вы можете просто объявить переменную вне области действия оператора switch.
var someVariable;
switch();
case x:
someVariable = 42;
break;
case y:
someVariable = 40;
break;
Поскольку варианты не являются блоками, фигурные скобки, обозначающие область действия, отсутствуют. Случаи, за неимением лучшего слова, похожи на метки.
Лучше объявить переменную вне оператора switch ()
и использовать ее в дальнейшем. Конечно, в этом сценарии вы не сможете использовать ключевое слово var
, потому что компилятор не будет знать, какой тип инициализировать.