11/07/2011




                                                                   ¿Qué son los Launchers &
                                                                   Choosers?
                                                            Modelo de aplicación de Windows Phone aisla cada
                                                             aplicación en su sandbox

                                                            APIs que dan acceso directo a características muy útiles
                                                             del teléfono (Cámara, Bing Maps, llamadas…)

                                                            Invocan distintas aplicaciones nativas que sustituyen la
                                                             app actual

                                                            Puede verse…
                                                              Un Launcher como una acción tipo «lanzar y olvidar»
                                                              Un Chooser como una acción «diálogo de abrir fichero»




         Launchers                                                 Launchers en Mango

   APIs mediante las que el usuario completa una tarea           BingMapsDirectionsTask*   BingMapsTask*
   No devuelven datos
                                                                  EmailComposeTask          MarketplaceDetailTask
   Pertenecen al nombre de espacio Microsoft.Phone.Task
   Cómo utilizarlos:                                             MarketplaceHubTask        MarketplaceReviewTask
      Crear instancia del Launcher deseado                       MarketplaceSearchTask     MediaPlayerLauncher
      Establecer propiedades del objeto launcher
      Invocar Launcher (médoto Show())                           PhoneCallTask             SearchTask
 Llaman a aplicaciones nativas  EmailComposeTask                SmsComposeTask            ShareLinkTask*
  llama a la aplicación de mensajería
                                                                  ShareStateTask*           WebBrowserTask
 La aplicación que llama un launcher es desactivada y
  reactivada                                                              *Launchers nuevos con respecto a
                                                                                Windows Phone 7.0




                                                                                                                               1
11/07/2011




            BingMapsDirectionsTask                                                                                        BingMapsTask

 Lanza la aplicación Bing Maps                                                                                 Lanza la aplicación Bing Maps
 Muestra direcciones entre dos puntos (LabeledMapLocation)                                                     Permite configurar el punto central
 Si no se especifica el origen o destino se toma posición actual                                               del mapa (Geocordinate)
                                                                                                                Admite cadena de búsqueda para
 BingMapsDirectionsTask bingMapsDirectionsTask = new BingMapsDirectionsTask();
                                                                                                                 marcar direcciones
 GeoCoordinate spaceNeedleLocation = new GeoCoordinate(47.6204,-122.3493);
 LabeledMapLocation spaceNeedleLML = new LabeledMapLocation("Space Needle", spaceNeedleLocation);
 bingMapsDirectionsTask.End = spaceNeedleLML;
 // bingMapsDirectionsTask.Start no está. La localización actual del usuario es usada como punto de inicio       BingMapsTask bingMapsTask = new BingMapsTask();
 bingMapsDirectionsTask.Show();                                                                                  // Omit the Center property to use the user's current location.
                                                                                                                 // bingMapsTask.Center = new GeoCoordinate(47.6204, -122.3493);
                                                                                                                 bingMapsTask.SearchTerm = "coffee"; bingMapsTask.ZoomLevel = 2;




            EmailComposeTask                                                                                              MarketplaceDetailTask

 Lanza la aplicación Email                                                                                   Lanza la aplicación cliente de Marketplace Windows
 Muestra nuevo mail                                                                                           Phone
 Configurar asunto, receptores, cuerpo mensaje                                                               Muestra detalles del producto especificado

    EmailComposeTask emailComposeTask = new EmailComposeTask();                                                   // Muestra una aplicación utilizando el ContenType por defecto
    emailComposeTask.Subject = "message subject";                                                                 MarketplaceDetailTask marketplaceDetailTask = new MarketplaceDetailTask();
    emailComposeTask.Body = "message body";                                                                       marketplaceDetailTask.ContentIdentifier = "<ID>";
    emailComposeTask.To = "recipient@example.com";                                                                marketplaceDetailTask.ContentType = MarketplaceContentType.Applications;
    emailComposeTask.Cc = "cc@example.com";                                                                       marketplaceDetailTask.Show();
    emailComposeTask.Bcc = "bcc@example.com";
    emailComposeTask.Show();




                                                                                                                                                                                                       2
11/07/2011




          MarketplaceHubTask                                                                        MarketplaceReviewTask

 Lanza la aplicación cliente de Marketplace Windows                                      Lanza la aplicación cliente de Marketplace Windows
  Phone                                                                                    Phone
 Propiedad ContentType establece tipo de contenido                                       Muestra revisiones de la aplicación actual
  buscado

                                                                                            MarketplaceReviewTask marketplaceReviewTask = new MarketplaceReviewTask();
   MarketplaceHubTask marketplaceHubTask = new MarketplaceHubTask();                        marketplaceReviewTask.Show();
   marketplaceHubTask.ContentType = MarketplaceContentType.Music;
   marketplaceHubTask.Show();




          MarketplaceSearchTask                                                                     MediaPlayerLauncher

 Lanza la aplicación cliente de Marketplace Windows Phone                                Lanza la aplicación Media Player
 Muestra resultados de búsqueda según los parámetros de                                  Reproduce el archivo especificado
  búsqueda proporcionados                                                                 Permite especificar:
                                                                                              localización del archivo
   //Búsqueda de una aplicación, utilizando ContentType por defecto.                          controles mostrados
   MarketplaceSearchTask marketplaceSearchTask = new MarketplaceSearchTask();                 orientación
   marketplaceSearchTask.SearchTerms = "accelerometer xna";
   marketplaceSearchTask.Show();
                                                                                             MediaPlayerLauncher mediaPlayerLauncher = new MediaPlayerLauncher();
                                                                                             mediaPlayerLauncher.Media = new Uri("MyVideo.wmv", UriKind.Relative);
            // Búsqueda de una canción.                                                      mediaPlayerLauncher.Location = MediaLocationType.Data;
            MarketplaceSearchTask marketplaceSearchTask = new MarketplaceSearchTask();       mediaPlayerLauncher.Controls = MediaPlaybackControls.Pause | MediaPlaybackControls.Stop;
            marketplaceSearchTask.ContentType = MarketplaceContentType.Music;                mediaPlayerLauncher.Orientation = MediaPlayerOrientation.Landscape;
            marketplaceSearchTask.SearchTerms = "song title";                                mediaPlayerLauncher.Show();
            marketplaceSearchTask.Show();




                                                                                                                                                                                          3
11/07/2011




                                                                                                              SearchTask
                  PhoneCallTask

     Lanza el teléfono mostrando el número y nombre del                                             Lanza la aplicación de búsqueda
      contacto especificado                                                                          Realiza búsquedas según los criterios proporcionados

                                                                                                       SearchTask searchTask = new SearchTask();
                                                                                                       searchTask.SearchQuery = "XBox game trailers";
PhoneCallTask phoneCallTask = new PhoneCallTask();                                                     searchTask.Show();
phoneCallTask.PhoneNumber = “666123456";
phoneCallTask.DisplayName = “Eduardo";
phoneCallTask.Show();




                  ShareLinkTask                                                                               ShareStatusTask

     Abre un diálogo para compartir links en redes sociales                                         Abre un diálogo para cambiar el estado en redes
                                                                                                      sociales
     ShareLinkTask shareLinkTask = new ShareLinkTask();
     shareLinkTask.Title = "Code Samples";
     shareLinkTask.LinkUri = new Uri("http://msdn.microsoft.com/en-                                    ShareStatusTask shareStatusTask = new ShareStatusTask();
                                           us/library/ff431744(v=VS.92).aspx", UriKind.Absolute);      shareStatusTask.Status = “Este es mi estado actual.";
     shareLinkTask.Message = “Aquí hay un porrón de ejemplos sobre Windows Phone.";                    shareStatusTask.Show();
     shareLinkTask.Show();




                                                                                                                                                                          4
11/07/2011




            SmsComposeTask                                                      WebBrowserTask

   Lanza la aplicación de mensajería                                 Lanza el navegador web en la URL especificada
   Muestra nuevo SMS
   Permite especificar destinatarios y cuerpo
   del mensaje                                                         WebBrowserTask webBrowserTask = new WebBrowserTask();
                                                                        webBrowserTask.Uri = new Uri("http://www.mobilenug.es", UriKind.Absolute);
     SmsComposeTask smsComposeTask = new SmsComposeTask();              webBrowserTask.Show();
     smsComposeTask.To = "5555555555";
     smsComposeTask.Body = “Mira que aplicación mas chula.";
     smsComposeTask.Show();




            Choosers                                                            Choosers en Mango

 APIs mediante las que el usuario completa una tarea
 A diferencia de launchers devuelven datos                                 AddressChooserTask*                    CameraCaptureTask
 Llaman a aplicaciones nativas  CameraCaptureTask llama a la
  aplicación Cámara                                                         EmailAddressChooserTask                GameInviteTask*
 Pertenecen al nombre de espacio Microsoft.Phone.Task
 Cómo utilizarlos:                                                         PhoneNumberChooserTask                 PhotoChooserTask
       Crear instancia del Chooser deseado (objeto global)
       Establecer propiedades del objeto Chooser
                                                                            SaveContactTask                        SaveEmailAddressTask
       Invocar Chooser (médoto Show())
 Normalmente aplicación que llama un Chooser pasa a estado
  dormant  es reanudada al finalizar la tarea                              SavePhoneNumberTask                    SaveRingtoneTask*

 Es posible que la aplicación sea finalizada  no será restaurada
  automáticamente




                                                                                                                                                             5
11/07/2011




                                                                                                                                             public partial class MainPage : PhoneApplicationPage
                                                                                                                                             {
                                                                                                                                               // Declare the AddressChooserTask object with page scope.
                                                                                                                                               AddressChooserTask addressChooserTask;
                     AddressChooserTask                                                                                                          // Constructor
                                                                                                                                                 public MainPage()
                                                                                                                                                 {
                                                                                                                                                      InitializeComponent();
                                                                                                                                                      // Initialize the AddressChooserTask object and assign the Completed handler in the page constructor.

      Lanza la aplicación Contactos                                                                                                                  addressChooserTask = new AddressChooserTask();
                                                                                                                                                      addressChooserTask.Completed += new EventHandler<AddressResult>(addressChooserTask_Completed);
                                                                                                                                                 }
      Permite escoger un contacto al                                                                                                            // In this example, the AddressChooserTask is shown in response to a button click.
                                                                                                                                                 private void addressChooserButton_Click(object sender, RoutedEventArgs e)
       usuario                                                                                                                                   {
                                                                                                                                                      Try

      Si el usuario completa la tarea se                                                                                                             {
                                                                                                                                                           addressChooserTask.Show();
                                                                                                                                                      }
       lanza el evento Completed                                                                                                                      catch (System.InvalidOperationException ex)
                                                                                                                                                      {

      El contacto escogido se devuelve                                                                                                               }
                                                                                                                                                             // Catch the exception, but no handling is necessary.

                                                                                                                                                 }
       en un objeto AddressResult
                                                                                                                                                 // The Completed event handler. In this example, the retrieved address is shown in a TextBlock control.
                                                                                                                                                 void addressChooserTask_Completed(object sender, AddressResult e)
                                                                                                                                                 {
                                                                                                                                                     if (e.TaskResult == TaskResult.OK)
                                                                                                                                                     {
                                                                                                                                                          textBlock1.Text = "The address for " + e.DisplayName + " is " + e.Address;
                                                                                                                                                     }
                                                                                                                                                  }
                                                                                                                                             }




                     CameraCaptureTask                                                                                                       EmailAddressChooserTask

         Lanza la cámara                                                                                                         Lanza la aplicación Contactos
         Devuelve la imagen como Stream en un objeto PhotoResult                                                                 Permite seleccionar un contacto
         Nueva clase PhotoCamera integra funcionalidad de la                                                                     Devuelve string con dirección email seleccionado en un
          cámara en una app                                                                                                        objeto EmailResult
         Depurar con la herramienta WPConnect                                                                                 private void EmailAddressChooserTask_Clicked(object sender, RoutedEventArgs e)
                                                                                                                               {
             o Program FilesMicrosoft SDKsWindows Phonev7.1ToolsWPConnect                                                     try
             o Program Files (x86)Microsoft SDKsWindows Phonev7.1ToolsWPConnect                                               {
                                                                                                                                     EmailAddressChooserTask emailAddressChooserTask = new EmailAddressChooserTask();
                                                                                                                                     emailAddressChooserTask.Completed += new
private void CameraCaptureTask_Clicked(object sender, RoutedEventArgs e)                                                                                 EventHandler<EmailResult>(emailAddressChooserTask_Completed);
                                                                         void cameraCaptureTask_Completed(object sender,
{                                                                                                                                    emailAddressChooserTask.Show();
                                                                                                              PhotoResult e)
    try                                                                                                                            }
                                                                         {                                                                                           void emailAddressChooserTask_Completed(object sender, EmailResult e)
    {                                                                                                                              catch { }
                                                                             if (e.TaskResult == TaskResult.OK)                                                      {
      CameraCaptureTask cameraCaptureTask = new CameraCaptureTask();                                                           }
                                                                             {                                                                                           if (e.TaskResult == TaskResult.OK)
      cameraCaptureTask.Completed += new
                                                                                  BitmapImage bmp = new BitmapImage();                                                   {
               EventHandler<PhotoResult>(cameraCaptureTask_Completed);
                                                                                  bmp.SetSource(e.ChosenPhoto);                                                               EmailComposeTask emailComposeTask = new EmailComposeTask();
      cameraCaptureTask.Show();
                                                                                  myImage.Source = bmp;                                                                       emailComposeTask.To = e.Email;
    }
                                                                             }                                                                                                emailComposeTask.Subject = e.DisplayName + "This is an email";
    catch { }
                                                                          }                                                                                                   emailComposeTask.Show();
}
                                                                                                                                                                          }
                                                                                                                                                                      }




                                                                                                                                                                                                                                                              6
11/07/2011




                                                                                                                                   GameInviteTask
                        GameInviteTask                                                                                              private GameInviteTask_Clicked(object sender, RoutedEventArgs e)
                                                                                                                                    {
                                                                                                                                        try
                                                                                                                                        {
                                                                                                                                            GameInviteTask gameInviteTask = new GameInviteTask();

         Sólo para juegos Xbox LIVE                                                                                                        gameInviteTask.Completed += new EventHandler<TaskEventArgs>(gameInviteTask_Completed);
                                                                                                                                            gameInviteTask.SessionId = "<my session id>";
                                                                                                                                            gameInviteTask.Show();
         Envía invitaciones para sesiones                                                                                              }
                                                                                                                                        catch { }
          multijugador asíncronas                                                                                                   }

                                                                                                                                    void gameInviteTask_Completed(object sender, TaskEventArgs e)
                                                                                                                                    {
                                                                                                                                           switch(e.TaskResult)
                                                                                                                                           {
                                                                                                                                                  case TaskResult.OK:
                                                                                                                                                         // Game logic for when the invite was sent successfully
                                                                                                                                                         statusTextBlock.Text = "game invite sent.";
                                                                                                                                                         break;
                                                                                                                                                  case TaskResult.Cancel:
                                                                                                                                                         // Game logic for when the invite is cancelled by the user s
                                                                                                                                                         tatusTextBlock.Text = "game invite was cancelled.";
                                                                                                                                                         break;
                                                                                                                                                  case TaskResult.None:
                                                                                                                                                         // Game logic for when the invite could not be sent
                                                                                                                                                         statusTextBlock.Text = "game invite could not be sent.";
                                                                                                                                                         break;
                                                                                                                                           }
                                                                                                                                    }




                        PhotoChooserTask                                                                                           PhoneNumberChooserTask

            Permite seleccionar una foto                                                                             Muestra los contactos
            Devuelve un stream en un objeto                                                                          Permite elegir uno
             PhotoResult
                                                                                                                      Devuelve el nº de teléfono en un string dentro que
            Utilizar WPConnect para apps con
                                                                                                                       un objeto PhoneNumberResult
             PhotoChooserTask en el emulador
                                                                                                                     PhoneNumberChooserTask phoneNumberChooserTask = new phoneNumberChooserTask ();
                                                                                                                     phoneNumberChooserTask.Completed += new
                                                                                                                                              EventHandler<PhotoResult>(photoNumberChooserTask_Completed);
PhotoChooserTask photoChooserTask = new PhotoChooserTask();                                                          try
photoChooserTask.Completed += new                                                                                    {
               EventHandler<PhotoResult>(photoChooserTask_Completed);                                                    phoneNumberChooserTask.Show();                    void phoneNumberChooserTask _Completed(object sender,
try                                                                                                                  }                                                                                            PhoneNumberResult e)
{                                                                                                                    // Catch the exception, but no handling is necessary  {
    photoChooserTask.Show();                         void photoChooserTask_Completed(object sender, PhotoResult e)   catch { }                                                 if (e.TaskResult == TaskResult.OK)
}                                                    {                                                                                                                          {
// Catch the exception, but no handling is necessary     if (e.TaskResult == TaskResult.OK)                                                                                         PhoneCallTask phoneCallTask = new PhoneCallTask();
catch { }                                                {                                                                                                                          phoneCallTask.DisplayName = e.DisplayName;
                                                              BitmapImage bmp = new BitmapImage();                                                                                  phoneCallTask.PhoneNumber = e.PhoneNumber;
                                                              bmp.SetSource(e.ChosenPhoto);                                                                                         phoneCallTask.Show();
                                                         }                                                                                                                      }
                                                      }                                                                                                                     }




                                                                                                                                                                                                                                          7
11/07/2011




                SaveContactTask                                                                                                           SaveEmailAddressTask

 Lanza diálogo para guardar nuevo contacto                                                                                Lanza diálogo para guardar nueva dirección de correo
 No devuelve datos                                                                                                        No devuelve datos
                                                                                                                          SaveEmailAddressTask saveEmailAddressTask = new SaveEmailAddressTask();
SaveContactTask saveContactTask = new SaveContactTask();
                                                                                                                          saveEmailAddressTask.Completed += new EventHandler<TaskEventArgs>(saveEmailAddressTask_Completed);
saveContactTask.Completed += new EventHandler<SaveContactResult>(saveContactTask_Completed);
try
                                                                                                                          try
{
                                                                                                                          {
    saveContactTask.Show();                          void saveContactTask_Completed(object sender, SaveContactResult e)                                                          void saveEmailAddressTask_Completed (object sender,
                                                                                                                              saveEmailAddressTask.Show();
}                                                    {                                                                                                                                                                      SaveContactResult e)
                                                                                                                          }
// Catch the exception, but no handling is necessary        switch (e.TaskResult)                                                                                                {
                                                                                                                          // Catch the exception, but no handling is necessary
catch { }                                                   {                                                                                                                           If (e.TaskResult == TaskResult.OK)
                                                                                                                          catch { }
                                                                    case TaskResult.OK:                                                                                                 {
                                                                      // The user successfully saved the contact.                                                                             statusTextBlock.Text = "Save completed.";
                                                                      break;                                                                                                             }
                                                                    case TaskResult.Cancel:                                                                                             else
                                                                      // The user cancelled the task.                                                                                         If (e.TaskResult == TaskResult.Cancel)
                                                                      break;                                                                                                                  {
                                                                    case TaskResult.None:                                                                                                         statusTextBlock.Text = "Save cancelled.";
                                                                      // No information about the result is available.                                                                         }
                                                                      break;                                                                                                      }
                                                            }
                                                      }




                SavePhoneNumberTask                                                                                                       SaveRingtoneTask

 Guarda nº teléfono proporcionado en Contactos                                                                            Guarda el archivo de sonido proporcionado en la
                                                                                                                            lista de tonos
 No devuelve datos
                                                                                                                           No devuelve datos
SavePhoneNumberTask savePhoneNumberTask = new SavePhoneNumberTask();
savePhoneNumberTask.Completed += new EventHandler<TaskEventArgs>(savePhoneNumberTask_Completed);
                                                                                                                           El archivo puede establecerse como tono por
try
                                                                                                                            defecto o para un determinado contacto
{
 savePhoneNumberTask.Show();
                                                       void savePhoneNumberTask_Completed(object sender,
                                                                                                  SaveContactResult e)
                                                                                                                           Restricciones
}                                                      {                                                                          •   Archivo MP3 o WMA
// Catch the exception, but no handling is necessary          if (e.TaskResult == TaskResult.OK)
catch { }                                                     {
                                                                                                                                  •   Duración < 40 segundos
                                                                  statusTextBlock.Text = "Save completed.";                       •   Sin protección DRM Tamaño < 1MB
                                                              }
                                                              else
                                                                  if (e.TaskResult == TaskResult.Cancel)
                                                                  {
                                                                      statusTextBlock.Text = "Save cancelled.";
                                                                   }
                                                       }




                                                                                                                                                                                                                                                   8
11/07/2011




            SaveRingtoneTask                                                                                         Soporte en el emulador
      SavePhoneNumberTask saveRingtoneChooser = new SaveRingtoneTask();
      saveRingtoneChooser.Completed += new EventHandler<TaskEventArgs>(saveRingtoneChooser_Completed);
                                                                                                            Launchers y Choosers distinto comportamiento emulador - dispositivo
      try
      {
            saveRingtoneChooser.Source = new Uri("appdata:/myTone.mp3");                                 Clase                   Windows Phone                                  Emulador
            saveRingtoneChooser.DisplayName = "My custom ringtone";
            saveRingtoneChooser.Show();                                                                                          Habilita la cámara para hacer una foto y       No tiene cámara, devuelve una imagen por
      }                                                                                                  CameraCaptureTask       devuelve la imagen a la aplicación.            defecto a la aplicación.
      catch (Exception ex)
      {                                                                                                                          Permite a la aplicación enviar un mail         No es funcional, no es posible asociar una
             strMsg = ex.Message;                                                                        EmailComposeTask
                                                                                                                                 mostrando diálogo «nuevo mensaje».             cuenta de correo al emulador.
      }
                                                                                                                                 Abre la aplicación cliente de Marketplace y
                                                                                                                                                                                Muestra un error porque no existe ningún
                                                                                                         MarketplaceReviewTask   muestra la puntuación y críticas del
      void saveRingtoneChooser_Completed(object sender, TaskEventArgs e)                                                                                                        Windows Live ID asociado.
                                                                                                                                 producto especificado.
       {
             if (e.TaskResult == TaskResult.OK)                                                                                                                                 La aplicación puede iniciar el media player y
             {                                                                                                                   Dada una Uri permite abrir el media player a
                                                                                                         MediaPlayerLauncher                                                    reproducir música, pero no hay visualización
                 statusTextBlock.Text = "Save completed.";                                                                       la aplicación.
                                                                                                                                                                                de vídeos.
             }
             else                                                                                                                Lanza el teléfono con el número especificado
                 if (e.TaskResult == TaskResult.Cancel)                                                  PhoneCallTask                                                          Utiliza Fake GSM con una SIM ficticia.
                                                                                                                                 por la aplicación. Requiere tarjeta SIM.
                 {
                     statusTextBlock.Text = "Save cancelled.";                                                                   Permite a una aplicación lanzar el cliente
                 }                                                                                       SmsComposeTask          SMS con un nº de teléfono y/o mensaje.         Utiliza Fake GSM con una SIM ficticia.
      }                                                                                                                          Requiere SIM. No devuelve estado ni error.




            Recursos

 Centro de desarrollo de WP7 en MSDN
http://msdn.microsoft.com/es-es/windowsphone/default.aspx

 AppHub
http://create.msdn.com/

 Windows Phone Developer Blog
http://windowsteamblog.com/windows_phone/b/wpdev
 MobileNUG
http://www.mobilenug.es

 Forums
http://forums.create.msdn.com/forums/




                                                                                                                                                                                                                                     9

Modulo3 Launchers&amp;Choosers

  • 1.
    11/07/2011 ¿Qué son los Launchers & Choosers?  Modelo de aplicación de Windows Phone aisla cada aplicación en su sandbox  APIs que dan acceso directo a características muy útiles del teléfono (Cámara, Bing Maps, llamadas…)  Invocan distintas aplicaciones nativas que sustituyen la app actual  Puede verse…  Un Launcher como una acción tipo «lanzar y olvidar»  Un Chooser como una acción «diálogo de abrir fichero» Launchers Launchers en Mango  APIs mediante las que el usuario completa una tarea BingMapsDirectionsTask* BingMapsTask*  No devuelven datos EmailComposeTask MarketplaceDetailTask  Pertenecen al nombre de espacio Microsoft.Phone.Task  Cómo utilizarlos: MarketplaceHubTask MarketplaceReviewTask  Crear instancia del Launcher deseado MarketplaceSearchTask MediaPlayerLauncher  Establecer propiedades del objeto launcher  Invocar Launcher (médoto Show()) PhoneCallTask SearchTask  Llaman a aplicaciones nativas  EmailComposeTask SmsComposeTask ShareLinkTask* llama a la aplicación de mensajería ShareStateTask* WebBrowserTask  La aplicación que llama un launcher es desactivada y reactivada *Launchers nuevos con respecto a Windows Phone 7.0 1
  • 2.
    11/07/2011 BingMapsDirectionsTask BingMapsTask  Lanza la aplicación Bing Maps  Lanza la aplicación Bing Maps  Muestra direcciones entre dos puntos (LabeledMapLocation)  Permite configurar el punto central  Si no se especifica el origen o destino se toma posición actual  del mapa (Geocordinate)  Admite cadena de búsqueda para BingMapsDirectionsTask bingMapsDirectionsTask = new BingMapsDirectionsTask(); marcar direcciones GeoCoordinate spaceNeedleLocation = new GeoCoordinate(47.6204,-122.3493); LabeledMapLocation spaceNeedleLML = new LabeledMapLocation("Space Needle", spaceNeedleLocation); bingMapsDirectionsTask.End = spaceNeedleLML; // bingMapsDirectionsTask.Start no está. La localización actual del usuario es usada como punto de inicio BingMapsTask bingMapsTask = new BingMapsTask(); bingMapsDirectionsTask.Show(); // Omit the Center property to use the user's current location. // bingMapsTask.Center = new GeoCoordinate(47.6204, -122.3493); bingMapsTask.SearchTerm = "coffee"; bingMapsTask.ZoomLevel = 2; EmailComposeTask MarketplaceDetailTask  Lanza la aplicación Email  Lanza la aplicación cliente de Marketplace Windows  Muestra nuevo mail Phone  Configurar asunto, receptores, cuerpo mensaje  Muestra detalles del producto especificado EmailComposeTask emailComposeTask = new EmailComposeTask(); // Muestra una aplicación utilizando el ContenType por defecto emailComposeTask.Subject = "message subject"; MarketplaceDetailTask marketplaceDetailTask = new MarketplaceDetailTask(); emailComposeTask.Body = "message body"; marketplaceDetailTask.ContentIdentifier = "<ID>"; emailComposeTask.To = "recipient@example.com"; marketplaceDetailTask.ContentType = MarketplaceContentType.Applications; emailComposeTask.Cc = "cc@example.com"; marketplaceDetailTask.Show(); emailComposeTask.Bcc = "bcc@example.com"; emailComposeTask.Show(); 2
  • 3.
    11/07/2011 MarketplaceHubTask MarketplaceReviewTask  Lanza la aplicación cliente de Marketplace Windows  Lanza la aplicación cliente de Marketplace Windows Phone Phone  Propiedad ContentType establece tipo de contenido  Muestra revisiones de la aplicación actual buscado MarketplaceReviewTask marketplaceReviewTask = new MarketplaceReviewTask(); MarketplaceHubTask marketplaceHubTask = new MarketplaceHubTask(); marketplaceReviewTask.Show(); marketplaceHubTask.ContentType = MarketplaceContentType.Music; marketplaceHubTask.Show(); MarketplaceSearchTask MediaPlayerLauncher  Lanza la aplicación cliente de Marketplace Windows Phone  Lanza la aplicación Media Player  Muestra resultados de búsqueda según los parámetros de  Reproduce el archivo especificado búsqueda proporcionados  Permite especificar:  localización del archivo //Búsqueda de una aplicación, utilizando ContentType por defecto.  controles mostrados MarketplaceSearchTask marketplaceSearchTask = new MarketplaceSearchTask();  orientación marketplaceSearchTask.SearchTerms = "accelerometer xna"; marketplaceSearchTask.Show(); MediaPlayerLauncher mediaPlayerLauncher = new MediaPlayerLauncher(); mediaPlayerLauncher.Media = new Uri("MyVideo.wmv", UriKind.Relative); // Búsqueda de una canción. mediaPlayerLauncher.Location = MediaLocationType.Data; MarketplaceSearchTask marketplaceSearchTask = new MarketplaceSearchTask(); mediaPlayerLauncher.Controls = MediaPlaybackControls.Pause | MediaPlaybackControls.Stop; marketplaceSearchTask.ContentType = MarketplaceContentType.Music; mediaPlayerLauncher.Orientation = MediaPlayerOrientation.Landscape; marketplaceSearchTask.SearchTerms = "song title"; mediaPlayerLauncher.Show(); marketplaceSearchTask.Show(); 3
  • 4.
    11/07/2011 SearchTask PhoneCallTask  Lanza el teléfono mostrando el número y nombre del  Lanza la aplicación de búsqueda contacto especificado  Realiza búsquedas según los criterios proporcionados SearchTask searchTask = new SearchTask(); searchTask.SearchQuery = "XBox game trailers"; PhoneCallTask phoneCallTask = new PhoneCallTask(); searchTask.Show(); phoneCallTask.PhoneNumber = “666123456"; phoneCallTask.DisplayName = “Eduardo"; phoneCallTask.Show(); ShareLinkTask ShareStatusTask  Abre un diálogo para compartir links en redes sociales  Abre un diálogo para cambiar el estado en redes sociales ShareLinkTask shareLinkTask = new ShareLinkTask(); shareLinkTask.Title = "Code Samples"; shareLinkTask.LinkUri = new Uri("http://msdn.microsoft.com/en- ShareStatusTask shareStatusTask = new ShareStatusTask(); us/library/ff431744(v=VS.92).aspx", UriKind.Absolute); shareStatusTask.Status = “Este es mi estado actual."; shareLinkTask.Message = “Aquí hay un porrón de ejemplos sobre Windows Phone."; shareStatusTask.Show(); shareLinkTask.Show(); 4
  • 5.
    11/07/2011 SmsComposeTask WebBrowserTask  Lanza la aplicación de mensajería  Lanza el navegador web en la URL especificada  Muestra nuevo SMS  Permite especificar destinatarios y cuerpo  del mensaje WebBrowserTask webBrowserTask = new WebBrowserTask(); webBrowserTask.Uri = new Uri("http://www.mobilenug.es", UriKind.Absolute); SmsComposeTask smsComposeTask = new SmsComposeTask(); webBrowserTask.Show(); smsComposeTask.To = "5555555555"; smsComposeTask.Body = “Mira que aplicación mas chula."; smsComposeTask.Show(); Choosers Choosers en Mango  APIs mediante las que el usuario completa una tarea  A diferencia de launchers devuelven datos AddressChooserTask* CameraCaptureTask  Llaman a aplicaciones nativas  CameraCaptureTask llama a la aplicación Cámara EmailAddressChooserTask GameInviteTask*  Pertenecen al nombre de espacio Microsoft.Phone.Task  Cómo utilizarlos: PhoneNumberChooserTask PhotoChooserTask  Crear instancia del Chooser deseado (objeto global)  Establecer propiedades del objeto Chooser SaveContactTask SaveEmailAddressTask  Invocar Chooser (médoto Show())  Normalmente aplicación que llama un Chooser pasa a estado dormant  es reanudada al finalizar la tarea SavePhoneNumberTask SaveRingtoneTask*  Es posible que la aplicación sea finalizada  no será restaurada automáticamente 5
  • 6.
    11/07/2011 public partial class MainPage : PhoneApplicationPage { // Declare the AddressChooserTask object with page scope. AddressChooserTask addressChooserTask; AddressChooserTask // Constructor public MainPage() { InitializeComponent(); // Initialize the AddressChooserTask object and assign the Completed handler in the page constructor.  Lanza la aplicación Contactos addressChooserTask = new AddressChooserTask(); addressChooserTask.Completed += new EventHandler<AddressResult>(addressChooserTask_Completed); }  Permite escoger un contacto al // In this example, the AddressChooserTask is shown in response to a button click. private void addressChooserButton_Click(object sender, RoutedEventArgs e) usuario { Try  Si el usuario completa la tarea se { addressChooserTask.Show(); } lanza el evento Completed catch (System.InvalidOperationException ex) {  El contacto escogido se devuelve } // Catch the exception, but no handling is necessary. } en un objeto AddressResult // The Completed event handler. In this example, the retrieved address is shown in a TextBlock control. void addressChooserTask_Completed(object sender, AddressResult e) { if (e.TaskResult == TaskResult.OK) { textBlock1.Text = "The address for " + e.DisplayName + " is " + e.Address; } } } CameraCaptureTask EmailAddressChooserTask  Lanza la cámara  Lanza la aplicación Contactos  Devuelve la imagen como Stream en un objeto PhotoResult  Permite seleccionar un contacto  Nueva clase PhotoCamera integra funcionalidad de la  Devuelve string con dirección email seleccionado en un cámara en una app objeto EmailResult  Depurar con la herramienta WPConnect private void EmailAddressChooserTask_Clicked(object sender, RoutedEventArgs e) { o Program FilesMicrosoft SDKsWindows Phonev7.1ToolsWPConnect try o Program Files (x86)Microsoft SDKsWindows Phonev7.1ToolsWPConnect { EmailAddressChooserTask emailAddressChooserTask = new EmailAddressChooserTask(); emailAddressChooserTask.Completed += new private void CameraCaptureTask_Clicked(object sender, RoutedEventArgs e) EventHandler<EmailResult>(emailAddressChooserTask_Completed); void cameraCaptureTask_Completed(object sender, { emailAddressChooserTask.Show(); PhotoResult e) try } { void emailAddressChooserTask_Completed(object sender, EmailResult e) { catch { } if (e.TaskResult == TaskResult.OK) { CameraCaptureTask cameraCaptureTask = new CameraCaptureTask(); } { if (e.TaskResult == TaskResult.OK) cameraCaptureTask.Completed += new BitmapImage bmp = new BitmapImage(); { EventHandler<PhotoResult>(cameraCaptureTask_Completed); bmp.SetSource(e.ChosenPhoto); EmailComposeTask emailComposeTask = new EmailComposeTask(); cameraCaptureTask.Show(); myImage.Source = bmp; emailComposeTask.To = e.Email; } } emailComposeTask.Subject = e.DisplayName + "This is an email"; catch { } } emailComposeTask.Show(); } } } 6
  • 7.
    11/07/2011 GameInviteTask GameInviteTask private GameInviteTask_Clicked(object sender, RoutedEventArgs e) { try { GameInviteTask gameInviteTask = new GameInviteTask();  Sólo para juegos Xbox LIVE gameInviteTask.Completed += new EventHandler<TaskEventArgs>(gameInviteTask_Completed); gameInviteTask.SessionId = "<my session id>"; gameInviteTask.Show();  Envía invitaciones para sesiones } catch { } multijugador asíncronas } void gameInviteTask_Completed(object sender, TaskEventArgs e) { switch(e.TaskResult) { case TaskResult.OK: // Game logic for when the invite was sent successfully statusTextBlock.Text = "game invite sent."; break; case TaskResult.Cancel: // Game logic for when the invite is cancelled by the user s tatusTextBlock.Text = "game invite was cancelled."; break; case TaskResult.None: // Game logic for when the invite could not be sent statusTextBlock.Text = "game invite could not be sent."; break; } } PhotoChooserTask PhoneNumberChooserTask  Permite seleccionar una foto  Muestra los contactos  Devuelve un stream en un objeto  Permite elegir uno PhotoResult  Devuelve el nº de teléfono en un string dentro que  Utilizar WPConnect para apps con un objeto PhoneNumberResult PhotoChooserTask en el emulador PhoneNumberChooserTask phoneNumberChooserTask = new phoneNumberChooserTask (); phoneNumberChooserTask.Completed += new EventHandler<PhotoResult>(photoNumberChooserTask_Completed); PhotoChooserTask photoChooserTask = new PhotoChooserTask(); try photoChooserTask.Completed += new { EventHandler<PhotoResult>(photoChooserTask_Completed); phoneNumberChooserTask.Show(); void phoneNumberChooserTask _Completed(object sender, try } PhoneNumberResult e) { // Catch the exception, but no handling is necessary { photoChooserTask.Show(); void photoChooserTask_Completed(object sender, PhotoResult e) catch { } if (e.TaskResult == TaskResult.OK) } { { // Catch the exception, but no handling is necessary if (e.TaskResult == TaskResult.OK) PhoneCallTask phoneCallTask = new PhoneCallTask(); catch { } { phoneCallTask.DisplayName = e.DisplayName; BitmapImage bmp = new BitmapImage(); phoneCallTask.PhoneNumber = e.PhoneNumber; bmp.SetSource(e.ChosenPhoto); phoneCallTask.Show(); } } } } 7
  • 8.
    11/07/2011 SaveContactTask SaveEmailAddressTask  Lanza diálogo para guardar nuevo contacto  Lanza diálogo para guardar nueva dirección de correo  No devuelve datos  No devuelve datos SaveEmailAddressTask saveEmailAddressTask = new SaveEmailAddressTask(); SaveContactTask saveContactTask = new SaveContactTask(); saveEmailAddressTask.Completed += new EventHandler<TaskEventArgs>(saveEmailAddressTask_Completed); saveContactTask.Completed += new EventHandler<SaveContactResult>(saveContactTask_Completed); try try { { saveContactTask.Show(); void saveContactTask_Completed(object sender, SaveContactResult e) void saveEmailAddressTask_Completed (object sender, saveEmailAddressTask.Show(); } { SaveContactResult e) } // Catch the exception, but no handling is necessary switch (e.TaskResult) { // Catch the exception, but no handling is necessary catch { } { If (e.TaskResult == TaskResult.OK) catch { } case TaskResult.OK: { // The user successfully saved the contact. statusTextBlock.Text = "Save completed."; break; } case TaskResult.Cancel: else // The user cancelled the task. If (e.TaskResult == TaskResult.Cancel) break; { case TaskResult.None: statusTextBlock.Text = "Save cancelled."; // No information about the result is available. } break; } } } SavePhoneNumberTask SaveRingtoneTask  Guarda nº teléfono proporcionado en Contactos  Guarda el archivo de sonido proporcionado en la lista de tonos  No devuelve datos  No devuelve datos SavePhoneNumberTask savePhoneNumberTask = new SavePhoneNumberTask(); savePhoneNumberTask.Completed += new EventHandler<TaskEventArgs>(savePhoneNumberTask_Completed);  El archivo puede establecerse como tono por try defecto o para un determinado contacto { savePhoneNumberTask.Show(); void savePhoneNumberTask_Completed(object sender, SaveContactResult e)  Restricciones } { • Archivo MP3 o WMA // Catch the exception, but no handling is necessary if (e.TaskResult == TaskResult.OK) catch { } { • Duración < 40 segundos statusTextBlock.Text = "Save completed."; • Sin protección DRM Tamaño < 1MB } else if (e.TaskResult == TaskResult.Cancel) { statusTextBlock.Text = "Save cancelled."; } } 8
  • 9.
    11/07/2011 SaveRingtoneTask Soporte en el emulador SavePhoneNumberTask saveRingtoneChooser = new SaveRingtoneTask(); saveRingtoneChooser.Completed += new EventHandler<TaskEventArgs>(saveRingtoneChooser_Completed);  Launchers y Choosers distinto comportamiento emulador - dispositivo try { saveRingtoneChooser.Source = new Uri("appdata:/myTone.mp3"); Clase Windows Phone Emulador saveRingtoneChooser.DisplayName = "My custom ringtone"; saveRingtoneChooser.Show(); Habilita la cámara para hacer una foto y No tiene cámara, devuelve una imagen por } CameraCaptureTask devuelve la imagen a la aplicación. defecto a la aplicación. catch (Exception ex) { Permite a la aplicación enviar un mail No es funcional, no es posible asociar una strMsg = ex.Message; EmailComposeTask mostrando diálogo «nuevo mensaje». cuenta de correo al emulador. } Abre la aplicación cliente de Marketplace y Muestra un error porque no existe ningún MarketplaceReviewTask muestra la puntuación y críticas del void saveRingtoneChooser_Completed(object sender, TaskEventArgs e) Windows Live ID asociado. producto especificado. { if (e.TaskResult == TaskResult.OK) La aplicación puede iniciar el media player y { Dada una Uri permite abrir el media player a MediaPlayerLauncher reproducir música, pero no hay visualización statusTextBlock.Text = "Save completed."; la aplicación. de vídeos. } else Lanza el teléfono con el número especificado if (e.TaskResult == TaskResult.Cancel) PhoneCallTask Utiliza Fake GSM con una SIM ficticia. por la aplicación. Requiere tarjeta SIM. { statusTextBlock.Text = "Save cancelled."; Permite a una aplicación lanzar el cliente } SmsComposeTask SMS con un nº de teléfono y/o mensaje. Utiliza Fake GSM con una SIM ficticia. } Requiere SIM. No devuelve estado ni error. Recursos  Centro de desarrollo de WP7 en MSDN http://msdn.microsoft.com/es-es/windowsphone/default.aspx  AppHub http://create.msdn.com/  Windows Phone Developer Blog http://windowsteamblog.com/windows_phone/b/wpdev  MobileNUG http://www.mobilenug.es  Forums http://forums.create.msdn.com/forums/ 9