В данной статье я хочу рассказать о Launchers и Chooser в Windows Phone 7 (+Mango)
Предназначены они для использования специфичных функций телефона: позвонить, отправить смс, email, выбрать контакт из списка, получить изображение с камеры и так далее.
Несколько вводных слов
Отличие Launchers от Choosers в том, что первые не возвращают никакой информации(«Запустил и забыл»). Например, отправить СМС – это простое действие, и результат его не нужен, а если нам необходимо получить изображение с камеры, то это требует, как минимум, возвращения самого изображения.
Так что же такое Launchers и Choosers? Это ничто иное как специальные системные программы(которые можно запустить извне) встроенные в систему, позволяющие выполнять различные функции. То есть когда нам необходимо мы их просто запускаем и получаем результат (или не получаем).
Небольшой пример как это выглядит:
private void StartTask()
{
var task = new SmsComposeTask
{
To = "+375257777777",
Body = "Hello from windows phone launcher"
};
task.Show();
}
Как вы уже догадались, данный код откроет приложение для отправки смс и подставит туда номер телефона получателя и текст сообщения.
Работая с Launchers и Choosers(далее просто Launchers) необходимо учитывать, что ваше приложение будет деактивировано после того, как основной поток обработает событие, вызвавшее Show и активировано после завершения работы Launcher’а. Поэтому не забываем сохранять и восстанавливать состояние приложения!
Для большей ясности посмотрим следующий пример.
private void StartTask()
{
var task = new SmsComposeTask
{
To = "+375257777777",
Body = "Hello from windows phone launcher"
};
task.Show(); // здесь мы запускаем программу отправки СМС
RunComplicatedCalculations(); // но на этом работа программы не останавливается.
// основной поток будет ждать завершения метода
// RunComplicatedCalculations
}
То есть будет следующая картина: после вызова Show() работа приложения не заканчивается и будет выполняться метод RunComplicatedCalculations, но в то же время будет запущена программа для отправки СМС. И только когда метод RunComplicatedCalculations будет выполнен, приложение будет деактивировано. Таким образом можно(если это нужно, конечно) запустить Launcher и в то же время выполнить какое-нибудь сложное вычисление или синхронизацию, которые будут проходить незаметно для пользователя.
Это были общие детали относительно Launchers и Choosers. Теперь подробнее…
Получения результата работы Chooser
Очень важно знать механизм получения результата у Chooser’а. Для понимания рассмотрим пример использования:
private void StartChooser()
{
var photoChooser = new CameraCaptureTask();
photoChooser.Completed += photoChooser_Completed;
photoChooser.Show();
}
void photoChooser_Completed(object sender, PhotoResult e)
{
capturedImage.Source = new BitmapImage(new Uri(e.OriginalFileName,
UriKind.Absolute));
}
У каждого Chooser’а есть событие Completed, которое произойдет, когда мы закончим действие с Chooser’ом. В данном случае мы поместим только что сделанную фотографию в capturedImage.
Тип второго аргумента в обработчике события наследуется от TaskEventArgs, у которого есть 2 свойства:
- public virtual Exception Error { get; internal set; }
- public virtual TaskResult TaskResult { get; internal set; }
Error – ошибка, произошедшая во время работы Chooser’а.
TaskResult – результат работы Chooser’а. Может быть: Ok – работа прошла успешно(пользователь что-то выбрал), Cancel – пользователь ничего не выбрал (нажал «Отмена», или кнопку «Назад»), None – что-то пошло не так.
Наиболее используемые Launchers и Choosers
Далее рассмотрим по порядку наиболее часто используемые Launchers и Choosers(они все находятся в Microsoft.Phone.dll, Namespace: Microsoft.Phone.Tasks )
Как работать с email
- Как добавить email-адрес контакту: SaveEmailAddressTask
var task = new SaveEmailAddressTask();
task.Completed += (s, e) => // что-то сделать;
task.Show(); - Как отправить email: EmailComposeTask
var task = new EmailComposeTask {
Subject = "Тема сообщения",
Body = "Сообщение",
To = "xxx@gmail.com",
Cc = "agent007@example.com",
Bcc = "yyy@live.com",
CodePage = 1251
}.Show() - Как выбрать email адрес из списка контактов: EmailAddressChooserTask
var task = new EmailAddressChooserTask();
task.Completed += (s, e) =>
{
if (e.TaskResult == TaskResult.OK)
{
var resultTextBlock = new TextBlock
{
Text =
string.Format("Display name: {0}, Email: {1}",
e.DisplayName, e.Email)
};
resultPanel.Children.Add(resultTextBlock);
}
};
task.Show();
Следует учесть, что отправить email нельзя на эмуляторе, так как у вас должен быть настроен email аккаунт.
Как работать с изображениями
- Как выбрать изображение из памяти телефона: PhotoChooserTask
var task = new PhotoChooserTask
{
PixelHeight = 400,
PixelWidth = 400,
ShowCamera = true
};
task.Completed += (s, e) =>
{
if (e.TaskResult == TaskResult.OK)
{
var image = new Image
{
Source =
new BitmapImage(new Uri(e.OriginalFileName,
UriKind.Absolute))
};
resultPanel.Children.Add(image);
}
};
task.Show();Здесь стоит рассмотреть свойства класса PhotoChooserTask:
PixelHeight и PixelWidth Задают максимальный размер картинки выбранного изображения. ShowCamera Если равен true, то у пользователя будет возможность получить изображение сразу с камеры. В обработчике события Completed результат можно получить через второй параметр типа PhotoResult:
ChosenPhoto Поток на выбранное изображение. Тип Stream. OriginalFileName Полный путь к выбранному изображению. - Как получить изображение с камеры: CameraCaptureTask
var task = new CameraCaptureTask();
task.Completed += (s, e) =>
{
if (e.TaskResult == TaskResult.OK)
{
var image = new Image
{
Source =
new BitmapImage(new Uri(e.OriginalFileName,
UriKind.Absolute))
};
resultPanel.Children.Add(image);
}
};
task.Show();Дополнительных свойств для CameraCaptureTask нет и второй параметр в обработчике события Completed имеет тип PhotoResult. Поэтому работать с ним нужно также как и с PhotoChooserTask (см. выше).
Как работать с телефонными номерами
- Как выбрать номер телефона из списка контактов: PhoneNumberChooserTask
var task = new SavePhoneNumberTask {PhoneNumber = "+375257777777"};
task.Completed += (s, e) => // что-то сделать;
task.Show();Второй параметр обработчика события Completed имеет тип TaskEventArgs и содержит описанные в начале статьи свойства(и далее, если тип второго параметра обработчика события Completed будет TaskEventArgs , то я не буду заострять на этом внимание).
- Как выбрать номер телефона из списка контактов: PhoneNumberChooserTask
var task = new PhoneNumberChooserTask();
task.Completed += (s, e) =>
{
if (e.TaskResult == TaskResult.OK)
{
var resultTextBlock = new TextBlock
{
Text =
string.Format("Display name: {0}, Phone number: {1}",
e.DisplayName, e.PhoneNumber)
};
resultPanel.Children.Add(resultTextBlock);
}
};
task.Show();Здесь все интуитивно понятно (свойства e.DisplayName и e.PhoneNumber)
- Как позвонить: PhoneCallTask
var task = new PhoneCallTask
{
DisplayName = "Ivan Sidorov",
PhoneNumber = phoneNumber
}.Show();Тоже все прозрачно, но есть одно замечание: запуск данной программы не деактивирует ваше приложение.
- Как отправить SMS: SmsComposeTask
var task = new SmsComposeTask
{
To = "+375257777777",
Body = "Hello"
}.Show();Здесь мы можем задать 2 свойства – номер телефона получателя и текс сообщения.
Как работать со встроенным браузером и поиском
- Как запустить встроенный поисковик (Bing): SearchTask
var task = new SearchTask
{
SearchQuery = "idev.by"
}.Show();Единственный параметр – строка поиска.
- Как открыть встроенный браузер на заданной странице: WebBrowserTask
var task = new WebBrowserTask
{
Uri = new Uri("http://idev.by", UriKind.Absolute)
}.Show();Uri – URL адрес страницы
Как работать со встроенным медиа-плеером
Для этого предназначен класс MediaPlayerLauncher.
Свойства MediaPlayerLauncher:
Orientation | Ориентация экрана(портрет/пейзаж) в которой будет запущен медиа-плеер. |
Controls | Задает какие кнопки будут на плеере. Тип: [Flags] public enum MediaPlaybackControls { None = 0, Pause = 1, Stop = 2, FastForward = 4, Rewind = 8, Skip = 16, All = Skip | Rewind | FastForward | Stop | Pause, } Если необходим не полный набор кнопок(и не одна), то элементы перечисления можно комбинировать, например: Controls = MediaPlaybackControls.Pause | MediaPlaybackControls.Stop |
Location | Задает тип местоположения файла: MediaLocationType.Install –используется для файлов, которые хранятся в директории установки приложения (добавлены в проект и копируются в xap файл приложения) MediaLocationType.Data — для файлов, которые приложение сохраняет в изолированном хранилище. MediaLocationType.None – будет сгенерировано исключение FileNotFoundException |
Media | Путь к медиа-файлу |
Пример:
var task = new MediaPlayerLauncher
{
Orientation = MediaPlayerOrientation.Portrait,
Controls = MediaPlaybackControls.All,
Location = MediaLocationType.Install,
Media = new Uri("Data/Bon Jovi - Its My Life.mp3",
UriKind.Relative)
}.Show();
Следует учесть, что в эмуляторе нельзя проигрывать видео.
На это мы заканчиваем данную статью, но не закрываем тему. В следующей серии вас ждет знакомство с Launchers, добавленными в великолепной Mango.
Исходники LaunchersAndChoosersSrc
Последние статьи
-
Перехват трафика с помощью Fiddler
-
Dependency Property изнутри — Часть вторая
-
Dependency Property изнутри. Часть первая.
-
Индексы в локальной базе данных
-
Реализация простой фотогалереи на Windows Phone 7