SlideShare une entreprise Scribd logo
1  sur  9
Télécharger pour lire hors ligne
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

Contenu connexe

En vedette

Pawayangan windu krama 1 ru partasuwanda
Pawayangan windu krama 1 ru partasuwandaPawayangan windu krama 1 ru partasuwanda
Pawayangan windu krama 1 ru partasuwanda
Pranowo Budi Sulistyo
 
2011インターンシップ 09n1106西村好美
2011インターンシップ 09n1106西村好美2011インターンシップ 09n1106西村好美
2011インターンシップ 09n1106西村好美
Konom
 
Anderson zardo artigo sub-sistemas do cabeamento estruturado - cópia
Anderson zardo   artigo sub-sistemas do cabeamento estruturado - cópiaAnderson zardo   artigo sub-sistemas do cabeamento estruturado - cópia
Anderson zardo artigo sub-sistemas do cabeamento estruturado - cópia
Anderson Zardo
 
Trilhas slides
Trilhas slidesTrilhas slides
Trilhas slides
Iva Pavan
 

En vedette (15)

LAYOUT
LAYOUTLAYOUT
LAYOUT
 
What socialmedia is
What socialmedia isWhat socialmedia is
What socialmedia is
 
Επιστημονική Υποστήριξη Νέων Αγροτών - Ηλεκτρονικό Εμπόριο
Επιστημονική Υποστήριξη Νέων Αγροτών - Ηλεκτρονικό ΕμπόριοΕπιστημονική Υποστήριξη Νέων Αγροτών - Ηλεκτρονικό Εμπόριο
Επιστημονική Υποστήριξη Νέων Αγροτών - Ηλεκτρονικό Εμπόριο
 
Dna
DnaDna
Dna
 
diplopoda
diplopodadiplopoda
diplopoda
 
Pawayangan windu krama 1 ru partasuwanda
Pawayangan windu krama 1 ru partasuwandaPawayangan windu krama 1 ru partasuwanda
Pawayangan windu krama 1 ru partasuwanda
 
Solliciteren met linked in - Werkplein
Solliciteren met linked in -  WerkpleinSolliciteren met linked in -  Werkplein
Solliciteren met linked in - Werkplein
 
Carta aberta de dom Tomás Balduino aos bispos sobre construção de catedrais
Carta aberta de dom Tomás Balduino aos bispos sobre construção de catedraisCarta aberta de dom Tomás Balduino aos bispos sobre construção de catedrais
Carta aberta de dom Tomás Balduino aos bispos sobre construção de catedrais
 
2011インターンシップ 09n1106西村好美
2011インターンシップ 09n1106西村好美2011インターンシップ 09n1106西村好美
2011インターンシップ 09n1106西村好美
 
Anderson zardo artigo sub-sistemas do cabeamento estruturado - cópia
Anderson zardo   artigo sub-sistemas do cabeamento estruturado - cópiaAnderson zardo   artigo sub-sistemas do cabeamento estruturado - cópia
Anderson zardo artigo sub-sistemas do cabeamento estruturado - cópia
 
урок2
урок2урок2
урок2
 
Trilhas slides
Trilhas slidesTrilhas slides
Trilhas slides
 
Oficina de Entrosamento - PJ BH 2012
Oficina de Entrosamento - PJ BH 2012Oficina de Entrosamento - PJ BH 2012
Oficina de Entrosamento - PJ BH 2012
 
Anneolmak
AnneolmakAnneolmak
Anneolmak
 
Tema 1
Tema 1Tema 1
Tema 1
 

Similaire à Modulo3 Launchers&amp;Choosers

Integracin2octubre 121203183209-phpapp01
Integracin2octubre 121203183209-phpapp01Integracin2octubre 121203183209-phpapp01
Integracin2octubre 121203183209-phpapp01
Gabriel Tocol
 
Presentacion Tesis
Presentacion TesisPresentacion Tesis
Presentacion Tesis
GEOVAN21
 
Instructivo dia 4_curso_flex
Instructivo dia 4_curso_flexInstructivo dia 4_curso_flex
Instructivo dia 4_curso_flex
Victor Aravena
 
Cuáles son las tareas que debes finalizar antes de vender tu aplicación en el...
Cuáles son las tareas que debes finalizar antes de vender tu aplicación en el...Cuáles son las tareas que debes finalizar antes de vender tu aplicación en el...
Cuáles son las tareas que debes finalizar antes de vender tu aplicación en el...
Luis Ruben Malla
 

Similaire à Modulo3 Launchers&amp;Choosers (16)

inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
 
Android
AndroidAndroid
Android
 
Integracin2octubre 121203183209-phpapp01
Integracin2octubre 121203183209-phpapp01Integracin2octubre 121203183209-phpapp01
Integracin2octubre 121203183209-phpapp01
 
Clases de Programación Android
Clases de Programación AndroidClases de Programación Android
Clases de Programación Android
 
Clase
ClaseClase
Clase
 
Instrucciones y estructuras
Instrucciones y estructurasInstrucciones y estructuras
Instrucciones y estructuras
 
Presentacion Tesis
Presentacion TesisPresentacion Tesis
Presentacion Tesis
 
Taller mobile by trustparency
Taller mobile by trustparencyTaller mobile by trustparency
Taller mobile by trustparency
 
Tutorial App Inventor 2
Tutorial App Inventor 2Tutorial App Inventor 2
Tutorial App Inventor 2
 
Instructivo dia 4_curso_flex
Instructivo dia 4_curso_flexInstructivo dia 4_curso_flex
Instructivo dia 4_curso_flex
 
Construyendo la nueva app social, local y móvil
Construyendo la nueva app social, local y móvilConstruyendo la nueva app social, local y móvil
Construyendo la nueva app social, local y móvil
 
Construyendo la nueva app social, local y móvil
Construyendo la nueva app social, local y móvilConstruyendo la nueva app social, local y móvil
Construyendo la nueva app social, local y móvil
 
Introduccion a Android
Introduccion a AndroidIntroduccion a Android
Introduccion a Android
 
Documento de análisis de diseño
Documento de análisis de diseñoDocumento de análisis de diseño
Documento de análisis de diseño
 
Cuáles son las tareas que debes finalizar antes de vender tu aplicación en el...
Cuáles son las tareas que debes finalizar antes de vender tu aplicación en el...Cuáles son las tareas que debes finalizar antes de vender tu aplicación en el...
Cuáles son las tareas que debes finalizar antes de vender tu aplicación en el...
 
Clase celulares
Clase celularesClase celulares
Clase celulares
 

Plus de Eduardo

Plus de Eduardo (15)

Modulo19 Localización
Modulo19 LocalizaciónModulo19 Localización
Modulo19 Localización
 
Modulo18 Giroscopo
Modulo18 GiroscopoModulo18 Giroscopo
Modulo18 Giroscopo
 
Modulo17 Brujula
Modulo17 BrujulaModulo17 Brujula
Modulo17 Brujula
 
Modulo14 Notificaciones
Modulo14 NotificacionesModulo14 Notificaciones
Modulo14 Notificaciones
 
Modulo13 Web Services
Modulo13 Web ServicesModulo13 Web Services
Modulo13 Web Services
 
Modulo12 Network Information
Modulo12 Network InformationModulo12 Network Information
Modulo12 Network Information
 
Modulo11 Pim
Modulo11 PimModulo11 Pim
Modulo11 Pim
 
Modulo10 Background Audio
Modulo10 Background AudioModulo10 Background Audio
Modulo10 Background Audio
 
Modulo9 Background Agents
Modulo9 Background AgentsModulo9 Background Agents
Modulo9 Background Agents
 
Modulo8 Servicio De Notificaciones
Modulo8 Servicio De NotificacionesModulo8 Servicio De Notificaciones
Modulo8 Servicio De Notificaciones
 
Modulo7 Bases de Datos
Modulo7 Bases de DatosModulo7 Bases de Datos
Modulo7 Bases de Datos
 
Modulo5 Trucos Web Browser
Modulo5 Trucos Web BrowserModulo5 Trucos Web Browser
Modulo5 Trucos Web Browser
 
Modulo4 Indicadores De Progreso
Modulo4 Indicadores De ProgresoModulo4 Indicadores De Progreso
Modulo4 Indicadores De Progreso
 
Modulo 2 Modelo Ejecucion
Modulo 2 Modelo EjecucionModulo 2 Modelo Ejecucion
Modulo 2 Modelo Ejecucion
 
Modulo1 Herramientas De Desarrollo Wp7 1
Modulo1 Herramientas De Desarrollo Wp7 1Modulo1 Herramientas De Desarrollo Wp7 1
Modulo1 Herramientas De Desarrollo Wp7 1
 

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