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