Windows Phone. Lanzadores. Introducción.

En ocasiones nuestras aplicaciones necesitarán cierto grado de interacción con el sistema. Por ejemplo, realizar acciones como abrir Bing Maps para indicar una localización, abrir el MarketPlace para que el usuario puntue la aplicación o abrir el reproductor multimedia para reproducir un archivo.

¿Podemos realizar este tipo de acciones?

Por supuesto. Para ello tenemos a nuestra disposición los lanzadores. Un lanzador nos permite ejecutar una determianda acción en el sistema. Importante resaltar que cuando el lanzador se ejecuta, nuestra aplicación se cierra (hablaremos de todo esto con más detalle en próximas entradas cuando analicemos el ciclo de vida de las aplicaciones en Windows Phone). Además, no vamos a recibir ningun tipo de información por parte del lanzador. Por ejemplo, al abrir el MarketPlace para puntuar la aplicación, el usuario puede votar  o no nuestra aplicación pero el lanzador no nos indicará que ha sucedido.

Interesante, ¿verdad?. Veamos a continuación que posibilidades tenemos.

Contamos a nuestra disposición con un número elevado de lanzadores distintos. Son los siguientes (ordenados alfabéticamente):

  • BingMapsDirectionsTask. Pemite abrir la aplicación de mapas de Bing e indicar una ruta entre dos puntos dados.
  • BingMapsTask. Permite abrir la aplicación de mapas de Bing mostrando una posición concreta dando unas coordenadas.
  • EmailComposeTask. Permite abrir la aplicación de correo electrónico. El usuario será el encargado de decidir si enviar o no  el correo.
  • MarketplaceDetailTask. Permite abrir el MarketPlace mostrando la información correspondiente a una aplicación.
  • MarketplaceHubTask. Permite abrir el MarketPlace tanto en la sección de aplicaciones como en la sección de música.
  • MarketplaceReviewTask. Permite abrir el MarketPlace con la página de la aplicación abierta para que el usuario pueda puntuar la aplicación.
  • MarketplaceSearchTask. Permite abrir el MarketPlace mostrando los resultados correspondientes a una búsqueda. Muy útil para mostrar otras aplicaciones desarrolladas por ejemplo.
  • MediaPlayerLauncher. Permite abrir el reproductor multimedia y reproducir un archivo indicado.
  • PhoneCallTask. Permite abrir la aplicación de llamadas del sistema. Permite indicar por supuesto el teléfono al que llamar y además un nombre para dicho teléfono. No se puede automatizar la llamada. Será el usuario el que deba pulsar sobre el botón para realizar la llamada.
  • SearchTask. Permite realizar una búsqueda utilizando la aplicación de búsqueda del sistema. Podemos indicar el  texto a buscar.
  • ShareLinkTask. Permite compartir un enlace en las redes sociales.
  • ShareStatusTask. Permite actualizar el estado en redes sociales.
  • SmsComposeTask. Permite indicar tanto el teléfono del destinatario como el mensaje a enviar meidante un sms. No se puede automatizar el envio. Es decir, si al final se produce el envío o no depende del usuario.
  • WebBrowserTask. Permite abrir el navegador desde nuestra aplicación. Podemos indicarle una Uri a la que navegar.

Como podemos ver tenemos muchísimas opciones. Para aprender a utilizar cada uno de los lanzadores como siempre crearemos un ejemplo práctico.

La plantilla seleccionada será “Windows Phone Application” para simplificar al máximo el ejemplo.

Agregamos dentro del Grid principal de la página MainPage.xaml:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
     <ScrollViewer>
          <StackPanel>
               <Button x:Name="btnBingMapsDirectionsTask" Content="BingMapsDirectionsTask"/>
               <Button x:Name="btnBingMapsTask" Content="BingMapsTask"/>
               <Button x:Name="btnEmailComposeTask" Content="EmailComposeTask"/>
               <Button x:Name="btnMarketplaceDetailTask" Content="MarketplaceDetailTask"/>
               <Button x:Name="btnMarketplaceHubTask" Content="MarketplaceHubTask"/>
               <Button x:Name="btnMarketplaceReviewTask" Content="MarketplaceReviewTask"/>
               <Button x:Name="btnMarketplaceSearchTask" Content="MarketplaceSearchTask"/>
               <Button x:Name="btnMediaPlayerLauncher" Content="MediaPlayerLauncher"/>
               <Button x:Name="btnPhoneCallTask" Content="PhoneCallTask"/>
               <Button x:Name="btnSearchTask" Content="SearchTask"/>
               <Button x:Name="btnShareLinkTask" Content="ShareLinkTask"/>
               <Button x:Name="btnShareStatusTask" Content="ShareStatusTask"/>
               <Button x:Name="btnSmsComposeTask" Content="SmsComposeTask"/>
               <Button x:Name="btnWebBrowserTask" Content="WebBrowserTask"/>
          </StackPanel>
     </ScrollViewer>
</Grid>

Conseguiremos la siguiente interfaz:

Añadimos el manejador del evento Click de cada botón:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
     <ScrollViewer>
          <StackPanel>
               <Button x:Name="btnBingMapsDirectionsTask" Content="BingMapsDirectionsTask" Click="btnBingMapsDirectionsTask_Click"/>
               <Button x:Name="btnBingMapsTask" Content="BingMapsTask" Click="btnBingMapsTask_Click"/>
               <Button x:Name="btnEmailComposeTask" Content="EmailComposeTask" Click="btnEmailComposeTask_Click"/>
               <Button x:Name="btnMarketplaceDetailTask" Content="MarketplaceDetailTask" Click="btnMarketplaceDetailTask_Click"/>
               <Button x:Name="btnMarketplaceHubTask" Content="MarketplaceHubTask" Click="btnMarketplaceHubTask_Click"/>
               <Button x:Name="btnMarketplaceReviewTask" Content="MarketplaceReviewTask" Click="btnMarketplaceReviewTask_Click"/>
               <Button x:Name="btnMarketplaceSearchTask" Content="MarketplaceSearchTask" Click="btnMarketplaceSearchTask_Click"/>
               <Button x:Name="btnMediaPlayerLauncher" Content="MediaPlayerLauncher" Click="btnMediaPlayerLauncher_Click"/>
               <Button x:Name="btnPhoneCallTask" Content="PhoneCallTask" Click="btnPhoneCallTask_Click"/>
               <Button x:Name="btnSearchTask" Content="SearchTask" Click="btnSearchTask_Click"/>
               <Button x:Name="btnShareLinkTask" Content="ShareLinkTask" Click="btnShareLinkTask_Click" />
               <Button x:Name="btnShareStatusTask" Content="ShareStatusTask" Click="btnShareStatusTask_Click"/>
               <Button x:Name="btnSmsComposeTask" Content="SmsComposeTask" Click="btnSmsComposeTask_Click"/>
               <Button x:Name="btnWebBrowserTask" Content="WebBrowserTask" Click="btnWebBrowserTask_Click"/>
          </StackPanel>
     </ScrollViewer>
</Grid>

Comenzamos con el lanzador BingMapsDirectionsTask. Este lanzador abre la aplicación de mapas de Bing. Podemos especificar dos puntos para obtener la ruta entre ambos.

NOTA: Si solo indicamos un único punto se utilizará nuestra posición actual para realizar la ruta.

Debemos añadir la referencia a la librería System.Device. Una vez añadida la librería se deben añadir las siguientes using:

using System.Device.Location
using Microsoft.Phone.Tasks

Veamos el código de ejemplo utilizado al pulsar sobre el primer botón (marca la ruta entre Sevilla y Madrid):

private void btnBingMapsDirectionsTask_Click(object sender, RoutedEventArgs e)
{
     BingMapsDirectionsTask ruta = new BingMapsDirectionsTask();
     ruta.Start = new LabeledMapLocation("Sevilla", new GeoCoordinate(37.3879089355469 , 6.00195980072021));
     ruta.End = new LabeledMapLocation("Madrid", new GeoCoordinate(40.4202995300293 , 3.70577001571655));

     ruta.Show();
}

Seguimos utilizando los mapas de Bing. El siguiente lanzador se llama BingMapsTask. Nos permite mostrar unas coordenadas en concreto en el mapa. Puedes ver el uso básico a continuación:

private void btnBingMapsTask_Click(object sender, RoutedEventArgs e)
{
     BingMapsTask mapa = new BingMapsTask();
     mapa.SearchTerm = "Sevilla";

     mapa.Show();
}

Además de lo utilizado en el ejemplo tenemos opciones muy interesantes como indicar el nivel de zoom (propiedad ZoomLevel) o indicar unas coordenadas (propiedad Center).

Seguimos con el lanzador EmailComposeTask. Este lanzador nos permite abrir la aplicación de correo y enviar un correo electrónico.

NOTA: El usuario puede elegir con que cuenta realizar el envio. En caso de no tener una cuenta registrada al intentar lanzar la aplicación se correo se notificará al usuario que falta la cuenta y no se podrá completar el proceso.

NOTA2: Este lanzador no podemos probarlo en el emulador.

Veamos el código de ejemplo:

private void btnEmailComposeTask_Click(object sender, RoutedEventArgs e)
{
     EmailComposeTask correo = new EmailComposeTask();
     correo.To = "destinatario@correo.es";
     correo.Subject = "Test EmailComposeTask";
     correo.Body = "Cuerpo del correo electrónico.";

     correo.Show();
}

Nos centraremos a continuación en los lanzadores que nos permiten trabajar con el MarketPlace. El primero de ellos es MarketplaceDetailTask. Este lanzador nos permite abrir el MarketPlace mostrando la información de una aplicación en concreto. La propiedad fundamental es ContentIdentifier que espera el identificador de una aplicación. Es decir, para poder utilizar este lanzador debemos indicar el identificador de una aplicación que este publicada en el MarketPlace.

private void btnMarketplaceDetailTask_Click(object sender, RoutedEventArgs e)
{
     MarketplaceDetailTask detallesAplicacion = new MarketplaceDetailTask();
     detallesAplicacion.ContentIdentifier = null;
     detallesAplicacion.ContentType = MarketplaceContentType.Applications;

     detallesAplicacion.Show();
}

El siguiente lanzador nos abre el MarketPlace. Podremos indicar si mostramos el MarketPlace de aplicaciones o el de música. La propiedad utilizada para ello es ContentType que espera una enumeración de tipo MarketplaceContentType:

  • MarketplaceContentType.Music
  • MarketplaceContentType.Applications
private void btnMarketplaceHubTask_Click(object sender, RoutedEventArgs e)
{
     MarketplaceHubTask abrirMarket = new MarketplaceHubTask();
     abrirMarket.ContentType = MarketplaceContentType.Music;

     abrirMarket.Show();
}

MarketplaceReviewTask es un sencillo lanzador que nos abre la página de opinión de la aplicación:

private void btnMarketplaceReviewTask_Click(object sender, RoutedEventArgs e)
{
     MarketplaceReviewTask darOpinion = new MarketplaceReviewTask();
     darOpinion.Show();
}

El siguiente lanzador (MarketplaceSearchTask) nos permite realizar búsquedas en el MarketPlace:

private void btnMarketplaceSearchTask_Click(object sender, RoutedEventArgs e)
{
     MarketplaceSearchTask busquedaMarket = new MarketplaceSearchTask();
     busquedaMarket.ContentType = MarketplaceContentType.Applications;
     busquedaMarket.SearchTerms = "Javier Suárez Ruiz";

     busquedaMarket.Show();
}

MediaPlayerLauncher abre el reproductor multimedia. Podemos cargar archivos utilizando la propiedad Media (espera una Uri) tanto desde el almacenamiento aislado como desde una URL:

private void btnMediaPlayerLauncher_Click(object sender, RoutedEventArgs e)
{
     MediaPlayerLauncher reproductor = new MediaPlayerLauncher();
     reproductor.Media = new Uri("http://media.ch9.ms/ch9/cf36/619b25ee-8acd-46b1-bc96-f578d855cf36/W8TourIntroduccion.wmv", UriKind.Absolute);
     reproductor.Orientation = MediaPlayerOrientation.Landscape;

     reproductor.Show();
}

PhoneCallTask abre la aplicación teléfono permitiendonos llamar a un número de teléfono en concreto. La propiedad más interesante es PhoneNumber que nos permite indicar el teléfono al que llamar. Además del número podemos indicar un nombre utilizando la propiedad DisplayName:

private void btnPhoneCallTask_Click(object sender, RoutedEventArgs e)
{
     PhoneCallTask llamada = new PhoneCallTask();
     llamada.PhoneNumber = "666666666";
     llamada.DisplayName = "Mama";

     llamada.Show();
}

SearchTask, lanza la aplicación de búsqueda realizando la búsqueda de lo indicado en la propiedad SearchQuery:

private void btnSearchTask_Click(object sender, RoutedEventArgs e)
{
     SearchTask busqueda = new SearchTask();
     busqueda.SearchQuery = "Javier Suárez Ruiz Blog";

     busqueda.Show();
}

Con el lanzador que veremos a continuación podemos compartir un enlace entre varias redes sociales. La propiedad principal es LinkUri que es la URL a compartir. Veras lo sencillo que es con el siguiente ejemplo:

private void btnShareLinkTask_Click(object sender, RoutedEventArgs e)
{
     ShareLinkTask compartirEnlace = new ShareLinkTask();
     compartirEnlace.LinkUri = new Uri("https://javiersuarezruiz.wordpress.com");
     compartirEnlace.Message = "Visita el blog!";

     compartirEnlace.Show();
}

El siguiente lanzador (ShareStatusTask) nos permite actualizar el estado en varias redes sociales. La única propiedad de interes es Status que espera el texto que colocaremos como nuevo estado. A continuación, el código de ejemplo:

private void btnShareStatusTask_Click(object sender, RoutedEventArgs e)
{
     ShareStatusTask compartirEstado = new ShareStatusTask();
     compartirEstado.Status = "Realizando un ejemplo sobre lanzadores de WP7!";

     compartirEstado.Show();
}

SmsComposeTask nos permite enviar un mensaje de texto a un destinatario. Podemos indicar el teléfono del destinatario (propiedad To) además del texto del mensaje (propiedad Body):

private void btnSmsComposeTask_Click(object sender, RoutedEventArgs e)
{
     SmsComposeTask enviarSMS = new SmsComposeTask();
     enviarSMS.To = "666666666";
     enviarSMS.Body = "Visita https://javiersuarezruiz.wordpress.com";

     enviarSMS.Show();
}

El siguiente lanzador, llamado WebBrowserTask, nos permite abrir el navegador (Internet Explorer) navegando a una página en concreto. La página a la que se produce la navegación se establece utilizando la propiedad Uri. Puedes ver el ejemplo a continuación:

private void btnWebBrowserTask_Click(object sender, RoutedEventArgs e)
{
     WebBrowserTask navegador = new WebBrowserTask();
     navegador.Uri = new Uri("https://javiersuarezruiz.wordpress.com");

     navegador.Show();
}

Puedes ver en video el resultado de nuestro ejemplo a continuación:

NOTA: No todos los lanzadores se prueban en el video. Como hemos mencionado antes, algunos de ellos no funcionan en el emulador y otros (los que interaccionan con el MarketPlace) necesitan el identificador de una aplicación publicada.

Puedes descargar el ejemplo realizado a continuación:

Nada más en esta entrada. Hemos agrupado todos los lanzadores posibles en un único ejemplo. En futuras entradas algunos de estos lanzadores los utilizaremos viendolos con más detalle. Si os surgen dudas o sugerencias podéis dejarlas en los comentarios de la entrada.

Más Información:

MSDN: Launchers for Windows Phone.

2 pensamientos en “Windows Phone. Lanzadores. Introducción.

  1. Javier, muy bueno!

    Una consulta, es posible crear un launcher para acceder a las aplicaciones del chip (sim applications)?

    Saludos,
    Mario.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s