Windows Phone 7 Launchers & Choosers – Parte 4: i choosers in dettaglio

Print Content | More

Nell’ultimo post abbiamo visto in dettaglio i launchers: quali sono, a cosa servono e come funzionano. In questo post faremo lo stesso per i choosers; la struttura sarà analoga, per ognuno di essi vedremo a cosa servono, come si utilizzano e se sono testabili o meno con l’emulatore. La caratteristica che contraddisingue i choosers è la presenza di informazioni di ritorno: tutti i choosers implementano l’evento Completed, che viene invocato nel momento in cui il choosers ha terminato il suo compito e dobbiamo perciò elaborare i dati restituiti. Per questo motivo, per ognuno di essi vedremo di preciso anche la tipologia di informazioni che ci vengono restituite nell’oggetto che contiene i valori di ritorno (la cui istanza, come nome di default assegnato da Visual Studio, si chiama e).

Caratteristica comune di tale oggetto è esporre la proprietà TaskResult, che definisce se il task è andato a buon fine o meno. Tale proprietà ritorna uno dei seguenti valori dell’enumeratore TaskResult:

  • OK: questo valore viene restituito quando il task è andato a buon fine, ovvero l’oggetto e contiene dei valori di ritorno.
  • Cancel: questo valore viene restituito quando il task non è andato a buon fine o è stato annullato dall’utente (ad esempio, perchè ha premuto il tasto Back invece di utilizzare il chooser). In questo caso, l’oggetto e non contiene dati.
  • None: questo valore viene restituito quando non è possibile determinare l’esito del chooser.

Nel caso in cui si siano verificati degli errori, tra i valori di ritorno c’è anche la proprietà Error, che contiene l’eccezione che si è verificata (sotto forma di oggetto di tipo Exception).

Infine, come nel post precedente, vedremo se il chooser manda in tombstoning l’applicazione oppure no. Vi ricordo la solita precisazione: anche se trovate scritto “No”, non si tratta di una certezza, può sempre accadere che l’applicazione venga mandata in tombstoning anche se il chooser preso in esame, in condizioni normali, non lo provoca.

Camera Capture (CameraCaptureTask)

Questo chooser vi permette di scattare una foto con la fotocamera integrata nel device e importarla direttamente nella vostra applicazione: tale foto, infatti, non viene resa disponibile nel Camera Roll (l’album fotografico dell’applicazione Pictures in cui vengono inserite tutte le foto scattate).

Il chooser non richiede la valorizzazione di alcuna proprietà per essere attivato, basta chiamare il metodo Show.

Cosa ritorna l’evento Completed?

  • ChosenPhoto: un oggetto di tipo Stream, che contiene l’immagine scattata dalla fotocamera.
  • OriginalFileName: una stringa che contiene il nome e il percorso completo dell’immagine appena scattata.

E’ testabile?
Si, nell’angolo in alto a destra c’è il pulsante che permette di scattare la foto. Ovviamente otterremo un’immagine fittizia (l’emulatore, anche nel caso ne abbiate una, non si collega alla vostra webcam), ma ciò non vi impedisce di testare il funzionamento del chooser.

Causano il tombstoning dell’applicazione?

No

Esempio

private CameraCaptureTask captureTask;

public CameraCapture()
{
    InitializeComponent();
    captureTask=new CameraCaptureTask();
    captureTask.Completed += new EventHandler(captureTask_Completed);
}

void captureTask_Completed(object sender, PhotoResult e)
{
    if (e.TaskResult == TaskResult.OK)
    {
        BitmapImage image = new BitmapImage();
        image.SetSource(e.ChosenPhoto);
        imgPicture.Source = image;
        txtFilename.Text = e.OriginalFileName;
    }
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    captureTask.Show();
}

E-mail Address Chooser (EmailAddressChooserTask)

Questo chooser vi permette di selezionare l’indirizzo e-mail di un contatto della rubrica e importarlo nella vostra applicazione.

Il chooser non richiede la valorizzazione di alcuna proprietà per essere attivato, basta chiamare il metodo Show.

Cosa ritorna l’evento Completed?

  • Email: l’indirizzo email selezionato dall’utente.

E testabile?
Si, possiamo sfruttare i contatti realizzata con la nostra applicazione Contact Creator oppure uno di quelli fittizi già presenti nel sistema.

Causano il tombstoning dell’applicazione?

No

Esempio

private EmailAddressChooserTask mailTask;

public EmailAddressChooser()
{
    InitializeComponent();
    mailTask=new EmailAddressChooserTask();
    mailTask.Completed += new EventHandler(mailTask_Completed);
}

void mailTask_Completed(object sender, EmailResult e)
{
    if (e.TaskResult == TaskResult.OK)
    {
        txtEmail.Text = e.Email;
    }
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    mailTask.Show();
}

Phone Number Chooser (PhoneNumberChooserTask)

Questo chooser dovrebbe esservi già famigliare: si tratta infatti di quello utilizzato nell’applicazione Contact Chooser, che vi permette di importare un numero dalla rubrica.

Il chooser non richiede la valorizzazione di alcuna proprietà per essere attivato, basta chiamare il metodo Show.

Cosa ritorna l’evento Completed?

  • PhoneNumber: il numero di telefono selezionato dall’utente.

E’ testabile?
Si, le considerazioni sono le stesse fatte per l’Email Address Chooser.

Causano il tombstoning dell’applicazione?

No

Esempio

private PhoneNumberChooserTask numberTask;

public PhoneNumberChooser()
{
    InitializeComponent();
    numberTask=new PhoneNumberChooserTask();
    numberTask.Completed += new EventHandler(numberTask_Completed);
}

void numberTask_Completed(object sender, PhoneNumberResult e)
{
    if (e.TaskResult == TaskResult.OK)
        txtPhoneNumber.Text = e.PhoneNumber;
    else
        MessageBox.Show("The user has canceled the operation", "Phone Number Chooser", MessageBoxButton.OK);
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    numberTask.Show();
}

Photo Chooser (PhotoChooserTask)

Questo chooser vi permette di selezionare una delle immagini presenti nell’applicazione Pictures e importarle nella vostra: possono essere sia foto scattate con la fotocamera e salvate nell’album Camera Roll, sia foto appartenenti ad album caricati, ad esempio, con lo Zune Client.

Il chooser supporta alcune proprietà, che possono essere valorizzate prima dell’utilizzo:

  • PixelWidth e PixelHeight: quando queste due proprietà sono valorizzate con un numero intero, il chooser vi proporrà di effettuare il crop dell’immagine scelta con le dimensioni impostate.
  • ShowCamera: è un booleano che, se impostato su True, abilita un pulsante che vi permette di scattare una foto direttamente dalla fotocamera, oltre che sceglierla tra quelle disponibili.

Cosa ritorna l’evento Completed?

  • ChosenPhoto: un oggetto di tipo Stream, che contiene l’immagine scattata dalla fotocamera.
  • OriginalFileName: una stringa che contiene il nome e il percorso completo dell’immagine appena scattata.

E’ testabile?
Si, l’applicazione Pictures contiene delle immagini da utilizzare per i test.

Causano il tombstoning dell’applicazione?

No

Esempio

private PhotoChooserTask photoTask;

public PhotoChooser()
{
    InitializeComponent();
    photoTask=new PhotoChooserTask();
    photoTask.Completed += new EventHandler(photoTask_Completed);
}

void photoTask_Completed(object sender, PhotoResult e)
{
    if (e.TaskResult == TaskResult.OK)
    {
        BitmapImage image=new BitmapImage();
        image.SetSource(e.ChosenPhoto);
        imgPicture.Source = image;
    }
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    photoTask.PixelWidth = 300;
    photoTask.PixelHeight = 300;
    photoTask.ShowCamera = true;
    photoTask.Show();
}

      Save E-mail (SaveEmailAddressTask)

      Questo chooser vi permette di salvare in rubrica un indirizzo e-mail, creando un nuovo contatto o associandolo ad uno già esistente.

      Il chooser richiede la valorizzazione della proprietà Email con l’indirizzo da salvare, prima di essere richiamato.

      Cosa ritorna l’evento Completed?
      Solamente l’esito dell’operazione (TaskResult).

      E’ testabile?
      Si.

      Causano il tombstoning dell’applicazione?

      Si

      Esempio

      private SaveEmailAddressTask mailTask;
      
      public SaveEmailAddress()
      {
          InitializeComponent();
          mailTask=new SaveEmailAddressTask();
          mailTask.Completed += new EventHandler(mailTask_Completed);
      }
      
      void mailTask_Completed(object sender, TaskEventArgs e)
      {
          string message = e.TaskResult == TaskResult.OK
                               ? "Operation completed succesfully"
                               : "The operation has been canceled";
          MessageBox.Show(message, "Save e-mail address", MessageBoxButton.OK);
      }
      
      private void Button_Click(object sender, RoutedEventArgs e)
      {
          mailTask.Email = txtMailAddress.Text;
          mailTask.Show();
      }

      Save Phone Number (SavePhoneNumberTask)

      Anche questo chooser dovrebbe esservi famigliare: è quello che abbiamo usato nel programma Contact Creator per creare nuovi contatti, associandoli un numero di telefono. Ovviamente, il chooser può essere utilizzato anche per aggiungere un numero ad un contatto già esistente.

      Il chooser richiede la valorizzazione della proprietà PhoneNumber con il numero da salvare, prima di essere richiamato.

      Cosa ritorna l’evento Completed?
      Solamente l’esito dell’operazione (TaskResult).

      E’ testabile?
      Si.

      Causano il tombstoning dell’applicazione?

      Si

      Esempio

      private SavePhoneNumberTask phoneTask;
      
      public SavePhoneNumber()
      {
          InitializeComponent();
          phoneTask=new SavePhoneNumberTask();
          phoneTask.Completed += new EventHandler(phoneTask_Completed);
      }
      
      void phoneTask_Completed(object sender, TaskEventArgs e)
      {
          string message = e.TaskResult == TaskResult.OK
                   ? "Operation completed succesfully"
                   : "The operation has been canceled";
          MessageBox.Show(message, "Save e-mail address", MessageBoxButton.OK);
      }
      
      private void Button_Click(object sender, RoutedEventArgs e)
      {
          phoneTask.PhoneNumber = txtPhoneNumber.Text;
          phoneTask.Show();
      }

      Conclusione

      Abbiamo concluso la panoramica sui choosers messi a disposizione dalle API di Windows Phone 7: come sempre, di seguito trovate il link per scaricare un’applicazione di esempio che implementa tutti i chooser descritti.


      Windows Phone , Microsoft , Choosers

      0 comments

      Related Post


      (will not be published)
      (es: http://www.mysite.com)