День восьмой. Choosers (Задачи выбора)
Вступление
В прошлый раз мы познакомились с задачами выполнения (Launcher). Настало время узнать о задачах выбора (Choosers). Задачи выбора также относятся к пространству имен Microsoft.Phone.Tasks. Основное их отличие от задач выполнения состоит в том, что задачи выбора возвращают какое-то значение.
Задачи выбора
Итак, как было сказано выше, задачи выбора возвращает значение приложению. Чтобы использовать задачи выбора в программе, не забывайте установить ссылку на пространство имен Microsoft.Phone.Tasks.
using Microsoft.Phone.Tasks;
Рассмотрим некоторые из них:
- AddressChooserTask - позволяет выбрать физический адрес из списка контактов для использования в приложении (Windows Phone 7.1 Mango)
- CameraCaptureTask – позволяет вызвать диалоговое окно работы с камерой и возвращает приложению сделанную фотографию.
- EmailAddressChooserTask – позволяеют пользователю выбрать электронный адрес из списка контактов для использования в приложении.
- PhoneNumberChooserTask – позволяет пользователю выбрать телефонный номер из списка контактов для использования в приложении.
- PhotoChooserTask – позволяет пользователю выбрать фотографию на устройстве для использования в приложении.
- SaveEmailAddressTask - позволяет пользователю сохранить электронный адрес
- SavePhoneNumberTask - запускает Контакты, что позволяет пользователю сохранить телефонный номер из вашего приложения в новую или существующую запись.
- SaveRingtoneTask - позволяет сохранить MP3-файл из приложения в качестве рингтона (Windows Phone 7.1 Mango)
Использование задач выбора в программе
Каждая задача выбора имеет свои наборы свойств. После установки необходимых свойств для выбранной задачи нужно вызвать метод Show(). Кроме того, вам необходимо создать обработчик события, который будет что-то делать с возвращаемыми данными.
AddressChooserTask - Сохраняем физический адрес
Чтобы получить физический адрес пользователя из списка контактов, достаточно написать следующий код:
AddressChooserTask address;
void adress_Completed(object sender, AddressResult e)
{
if (e.TaskResult == TaskResult.OK)
{
MessageBox.Show("Адрес " + e.DisplayName +": " + e.Address);
}
}
private void buttonGetAdress_Click(object sender, RoutedEventArgs e)
{
address = new AddressChooserTask();
address.Completed += new EventHandler<AddressResult>(adress_Completed);
address.Show();
}
CameraCaptureTask - Снимаем на камеру
Для задачи показа сделанной фотографии в приложении, можно использовать следующий код:
CameraCaptureTask cameratask = new CameraCaptureTask();
cameratask.Completed += new EventHandler<PhotoResult>(cameratask_Completed);
cameratask.Show();
void cameratask_Completed(object sender, PhotoResult e)
{
if (e.TaskResult == TaskResult.OK)
{
BitmapImage bmp = new BitmapImage();
bmp.SetSource(e.ChosenPhoto);
image1.Source = bmp;
}
}
Когда произойдет метод Show(), отобразится стандартный интерфейс фотографирования, пользователь сделает фото и в Вашем приложении произойдёт событие, в обработчике которого данное фото можно получить. При отладке приложения в эмуляторе вместо изображения с камеры Вы увидите картинку, на которой черный блок перемещается по экрану. К сожаленю, эмулятор не поддерживает камеру, даже если на вашем компьютере установлена веб-камера. В принципе, для отладки вариант с двигающим прямоугольником вполне подойдет, но все-же рекомендуется проверить работу приложения на реальном устройстве перед публикацией приложения в Marketplace.
EmailAddressChooserTask - Выбор адреса электронной почты
Если вы захотите использовать в эмуляторе задачу выбора адреса электронной почты, то эмулятор предложит несколько "липовых@ адресов из адресной книги:
EmailAddressChooserTask emailtask = new EmailAddressChooserTask();
emailtask.Completed += new EventHandler<EmailResult>(emailtask_Completed);
emailtask.Show();
void emailtask_Completed(object sender, EmailResult e)
{
MessageBox.Show("Вы выбрали адрес: " + e.Email);
}
PhoneNumberChooserTask - Выбор телефонного номера
Пример практически ничем не отличается от предыдущего.
PhoneNumberChooserTask phonetask = new PhoneNumberChooserTask();
phonetask.Completed += new EventHandler<PhoneNumberResult>(phonetask_Completed);
phonetask.Show();
void phonetask_Completed(object sender, PhoneNumberResult e)
{
MessageBox.Show("Вы выбрали номер: " + e.PhoneNumber);
}
SavePhoneNumberTask - Сохранение телефонного номера в контактах
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
SavePhoneNumberTask savePhoneNumber = new SavePhoneNumberTask();
savePhoneNumber.Completed += new EventHandler<TaskEventArgs>(savePhoneNumber_Completed);
savePhoneNumber.PhoneNumber = "1987654320";
savePhoneNumber.Show();
}
void savePhoneNumber_Completed(object sender, TaskEventArgs e)
{
MessageBox.Show("Номер сохранён");
}
При вызове метода savePhoneNumber.Show() на экране появляется страница Контакты, позволяющее пользователю добавить заданный телефонный номер (или включить в уже существующий профиль).
Когда номер будет сохранен, пользователь должен нажать кнопку Back, чтобы вернуться в приложение. Сохранить телефонный номер без вызова страницы Контакты нельзя.
SaveEmailAddressTask - Сохранение электронного адреса в контактах
Пример схож с предыдущим методом SavePhoneNumberTask.
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
SaveEmailAddressTask saveEmail = new SaveEmailAddressTask();
saveEmail.Completed += new EventHandler<TaskEventArgs>(saveEmail_Completed);
saveEmail.Email = "[email protected]";
saveEmail.Show();
}
void saveEmail_Completed(object sender, TaskEventArgs e)
{
if (e.TaskResult == TaskResult.OK)
{
MessageBox.Show("Электронный адрес сохранён");
}
}
При вызове метода на экране появляется страница Контакты, позволяющее пользователю добавить электронный адрес.
Когда адрес будет сохранен, пользователь должен нажать кнопку Back, чтобы вернуться в приложение. Сохранить адрес без вызова страницы Контакты нельзя.
PhotoChooserTask - Выбор картинки
И, наконец, последний пример - выбор картинки.
PhotoChooserTask phototask = new PhotoChooserTask();
phototask.Completed += new EventHandler<PhotoResult>(phototask_Completed);
phototask.Show();
void phototask_Completed(object sender, PhotoResult e)
{
BitmapImage bmp = new BitmapImage();
bmp.SetSource(e.ChosenPhoto);
image1.Source = bmp;
}
SaveRingtoneTask
Позволяет приложению запустить Менеджер рингтонов и сохранить музыкальный файл в списке рингтонов. Сохраненный рингтон можно использовать и в качестве основного звонка и в контактах для определенного пользователя. Музыкальный файл должен соответствовать следующим параметрам
- рингтон может быть только файлом MP3 или WMA
- продолжительность музыки не должна превышать 40 секунд
- файл не должен иметь цифровую защиту (DRM)
- размер файла не должен превышать 1 мегабайт
В примере используется кнопка и текстовый блок
using Microsoft.Phone.Tasks;
public partial class MainPage : PhoneApplicationPage
{
// Declare the SaveRingtoneTask object with page scope
// so we can access it from event handlers.
SaveRingtoneTask saveRingtoneChooser;
// Constructor
public MainPage()
{
InitializeComponent();
// Initialize the SaveRingtoneTask and assign the Completed handler in the page constructor.
saveRingtoneChooser = new SaveRingtoneTask();
saveRingtoneChooser.Completed += new EventHandler<TaskEventArgs>(saveRingtoneChooser_Completed);
}
// In this example, the SaveRingtoneTask is shown in response to a button click.
private void addButton_Click(object sender, RoutedEventArgs e)
{
string strMsg = string.Empty;
try
{
saveRingtoneChooser.Source = new Uri("appdata:/myTone.mp3"); // имя файла зашито в коде
saveRingtoneChooser.DisplayName = "My custom ringtone";
saveRingtoneChooser.Show();
}
catch (Exception ex)
{
strMsg = ex.Message;
}
statusTextBlock.Text = strMsg;
}
// The Completed event handler. No data is returned from this Chooser, but
// the TaskResult field indicates whether the task was completed or cancelled.
void saveRingtoneChooser_Completed(object sender, TaskEventArgs e)
{
if (e.TaskResult == TaskResult.OK)
{
statusTextBlock.Text = "Save completed.";
}
else if (e.TaskResult == TaskResult.Cancel)
{
statusTextBlock.Text = "Save cancelled.";
}
}
}
Реклама