День восьмой. 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 = "mail@alexanderklimov.ru";
    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.";
        }
    }
}
Реклама