viernes, 14 de marzo de 2014

Procesos en Windows Phone (II): Launcher y Chooser




3.- Aplicaciones externas del sistema: Launcher y Chooser

Ya hemos visto como Windows Phone (WP en adelante) nos permite lanzar procesos externos con el fin de que el usuario realice tareas que preferimos delegar en otras aplicaciones. Además de esto, para algunas tareas concretas, WP nos da una serie de elementos para lanzar aplicaciones por defecto del sistema: los Launcher y los Chooser. Entendemos por aplicaciones del sistema las que forman parte de WP por defecto, dejando de lado las aplicaciones de terceros como la que desarrollariamos nosotros. Desgraciadamente esto también significa que no es posible implementar nuestros propios Launcher y Chooser.

Los Launcher y Chooser son limitados y los proporciona WP. Aquí teneis las listas completas con tutoriales de como usarlos:

La principal diferencia entre Launcher y Chooser es que el primero solo lanza la aplicación mientras que el segundo además devuelve algún tipo de resultado a nuestra aplicación cuando la tarea finaliza. Para entender mejor como se utilizan veremos a continuación un par de ejemplos a partir del código.


3.1.- Ejemplo de uso: Launcher:

Para ver un ejemplo práctico del uso de un Launcher he escogido el de lanzar el reproductor multimedia para mostrar un video al usuario. Basta con añadir los siguientes trozos de código al código de nuestra página (MyPage.xaml.cs por ejemplo).

Empezamos importando las bibliotecas correspondientes:
using System;
using Microsoft.Phone.Tasks;

El siguiente trozo de código es el que finalmente lanza la aplicación. Podeis añadirlo como el código del callback que se ejecutará al pulsar un botón por ejemplo:

//Inicializamos el Launcher
MediaPlayerLauncher mediaPlayerLauncher = new MediaPlayerLauncher();

// Indicamos el archivo de video a reproducir
mediaPlayerLauncher.Media = new Uri("MyVideo.wmv", UriKind.Relative);
// Indicamos donde se encuentra
mediaPlayerLauncher.Location = MediaLocationType.Data;
// Indicamos los controles disponibles para el usuario
mediaPlayerLauncher.Controls = MediaPlaybackControls.Pause | MediaPlaybackControls.Stop;
// Indicamos la orientación de la pantalla
mediaPlayerLauncher.Orientation = MediaPlayerOrientation.Landscape;

//Lanzamos el reproductor
mediaPlayerLauncher.Show();
Es así de sencillo. El sistema se encargará de llamar a las funciones apropiadas para salvar el estado de vuestra aplicación.


3.2.- Ejemplo de uso: Chooser:

En este caso veremos un ejemplo de Chooser con el que el usuario escojerá un contacto de su lista de contactos.

El proceso de inicializar y lanzar un Chooser es muy similar al de un Launcher, salvo que en este caso tenemos que indicar la parte de nuestro código que se encargará de manejar el resultado del Chooser.

Empezamos importando las bibliotecas correspondientes:
using Microsoft.Phone.Tasks;

Inicializamos y lanzamos el Chooser:
PhoneNumberChooserTask phoneNumberChooserTask;
phoneNumberChooserTask = new PhoneNumberChooserTask();
// Añadimos el callback
phoneNumberChooserTask.Completed += new EventHandler<PhoneNumberResult>(phoneNumberChooserTask_Completed);
phoneNumberChooserTask.Show();
La penúltima línea es la que marca la diferencia. En dicha línea le estamos añadiendo a nuestro Chooser una función a modo de callback que se ejecutará cuando la nueva aplicación termine.

Este sería el código de ejemplo de nuestro callback, que añadiriamos al código de nuestra página:
void phoneNumberChooserTask_Completed(object sender, PhoneNumberResult e)
{
    // Si el resultado es positivo, es decir, si el usuario ha escogido un contacto...
    if (e.TaskResult == TaskResult.OK)
    {
        MessageBox.Show("The phone number for " + e.DisplayName + " is " + e.PhoneNumber);
    }
}

En este caso el resultado se encapsula en un objeto PhoneNumberResult que está formado por un nombre (DisplayName) y un número de teléfono (PhoneNumber). Nuestra función simplemente lo mostrará por pantalla.

Con esto ya tendríamos integrado funcionalidad básica de nuestro teléfono. Es una buena alternativa al uso de protocolos y URIs aunque la lista de posibilidades sea limitada.

No hay comentarios:

Publicar un comentario