desarrollo avanzado para windows phone
DESCRIPTION
Slides de una presentación de desarrollo avanzado para Windows Phone 7.5, se tratan temas de: - Tiles - Deep Application Linking (Secondary Tiles) - Lectura de códigos de barra - Cargar un recorrido en Bing Maps - Fast Application SwitchingTRANSCRIPT
Desarrollo avanzado de aplicaciones para Windows Phone 7.5
Ivan R. Toledo Ivanovic
[email protected] | @itoledo
Windows Phone Microsoft Corporation.
Temas a tratar Tiles Deep Application Linking (Secondary Tiles) Lectura de Códigos de Barra Cargar un recorrido en Bing Maps Fast Application Switching XNA + Sockets… SpaceSync
Windows Phone Microsoft Corporation.3
Tiles Sirven como íconos en pantalla inicio Atributos
Texto Imagen Cantidad Título posterior Contenido posterior Imagen posterior
Pueden enlazar a distintas pantallas de la aplicación
Windows Phone Microsoft Corporation.4
Tiles
Front Back
Windows Phone Microsoft Corporation.5
Live Tiles Generar imagen en backend (php, asp) Refrescarla usando BackgroundTask
ShellTileSchedule? No actualiza reverso Sólo para dispositivos con más de 256Mb de
RAM!
Windows Phone Microsoft Corporation.6
Funcionalidades agentes en Background
Permitido Tiles Toast Location Network R/W ISO store Sockets Mayoría de APIs
Restringido
Display UI XNA Micrófono y Cámara Sensores Reproducir audio
(sólo puede usar background audio APIs)
Windows Phone Microsoft Corporation.7
Live Tiles (ii) Detectar si un dispositivo tiene más de 256MB
DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");
Número mágico: 94371840L; Actualizar Tile primario para cambiar
BackgroundImage ShellTile PrimaryTile = ShellTile.ActiveTiles.First(); tile.BackBackgroundImage = new
Uri("http://xxx/n/birdie/tile.php"); PrimaryTile.Update(tile);
Windows Phone Microsoft Corporation.8
Live Tiles (iii) Crear proyecto BackgroundAgent para
actualización de Tile primario Modificar OnInvoke() para cambiar
BackBackgroundImage Enlazar proyecto desde proyecto principal Crear PeriodicTask para invocar BackgroundTask
Windows Phone Microsoft Corporation.9
Secondary Tiles- Deep Application Linking- Clase StandardTileData- ShellTile.ActiveTiles- URIs de destino
Windows Phone Microsoft Corporation.10
Leer un código de barra ZXing es lo más común dentro del Open Source Ports para múltiples plataformas Varios ports para WP7/Silverlight No todos tienen live capture (posible desde
WP7.5) Stéphanie Hertrich …
http://blogs.msdn.com/b/stephe/
Windows Phone Microsoft Corporation.11
Leer un código de barra (ii)WP7.ScanBarCode.BarCodeManager.StartScan(// éxito(b) => Dispatcher.BeginInvoke(() =>{ … },//error(ex) => Dispatcher.BeginInvoke(() =>{ … },com.google.zxing.BarcodeFormat.ALL_1D);
Windows Phone Microsoft Corporation.12
Un pequeño ejercicio con mapas Añadir capa vectorial con recorrido Consumir webservice con datos del recorrido Parsear JSON de respuesta Enviar mensaje desde ViewModel a página Crear objetos necesarios en Bing Maps
Layer Polyline
Windows Phone Microsoft Corporation.13
Consumir webservice WS muy simple con parámetros en HTTP GET Lo consumimos desde el ViewModel
WebClient wc = new WebClient();Uri uri = new Uri("http://xxx/itinerario.php?servicio=" + rec + “&guid=“ + Guid.NewGuid());
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadRecorridoCompletedEventHandler);
wc.DownloadStringAsync(uri, rec);
Windows Phone Microsoft Corporation.14
Parsear JSON Instalar librería JSON desde NuGET
install-package newtonsoft.json Contenido de json es arrays de strings anidados
[[["PB241","VESPUCIO 1 \/ LOS LIBERTADORES","-70.681349","-33.364061"],["PB184","VESPUCIO 2 \/ LOS LIBERTADORES","-70.680976","-33.366831"], …]]
Windows Phone Microsoft Corporation.15
Parsear JSON (ii)List<List<List<string>>> res;res = JsonConvert.DeserializeObject<List<List<List<string>>>>(e.Result);
List<List<string>> ida = res[0];
Windows Phone Microsoft Corporation.16
Notificar pantalla desde ViewModel
Instalar MVVM Light install-package mvvmlight
Para enviar mensaje desde ViewModel: Messenger.Default.Send<RecorridoDescargadoMessage>(new RecorridoDescargadoMessage());
Para recibir mensaje desde pantalla: Messenger.Default.Register<RecorridoDescargadoMessage>(this, (action) => ReceiveMessage(action));
Windows Phone Microsoft Corporation.17
Crear objetos en Bing Maps Añadir capa al mapa
MapLayer polyLayer; polyLayer = new MapLayer(); Map.Children.Add(polyLayer);
Windows Phone Microsoft Corporation.18
Crear objetos en Bing Maps (ii) Dibujar puntos del recorrido en la capa
polyLayer.Children.Clear(); MapPolyline line = new MapPolyline(); line.Locations = new LocationCollection(); line.Stroke = new SolidColorBrush(Colors.Red); line.StrokeThickness = 3; foreach (Paradero p in App.ViewModel.ParaderosRecorrido) line.Locations.Add(p.loc);
polyLayer.Children.Add(line);
Windows Phone Microsoft Corporation.19
Fast Application Switching Aplicaciones recientemente utilizadas aparecen
de inmediato Aplicaciones permanecen en memoria
Administrador de tareas Mientras las apps duermen…
No reciben ciclos de CPU Se liberan los recursos
Windows Phone Microsoft Corporation.
Ciclo de vida en WP 7.5
ejecutando
desactivada
durmiendo
activada
Recursos liberadosHilos y timers suspendidos
Fast App Resume
Guardar estado!Estado preservado!IsAppInstancePreserved == true
Restaurar estado!IsAppInstancePreserved == false
Resumiendo .. .
Tombstone a la app más antigua
Tombstoned
Windows Phone Microsoft Corporation.21
Cómo implementar FAS? Implementar serialización/deserialización de
datos de la app (ViewModels) IDataStorage
Capturar eventos y guardar/restaurar datos de la app Application_Deactivated Application_Activated
Windows Phone Microsoft Corporation.22
XNA + Sockets … SpaceSync Objetivo: sincronizar dos o más teléfonos con la
mayor precisión posible para que muestren la misma imagen animada
NTP? Sólo para LANs por la baja precisión
Cómo transmitir el tiempo rápida y facilmente, sin tener que digitar números IP?
Windows Phone Microsoft Corporation.23
Solución Paquetes UDP por la rapidez Utilizar UdpAnySourceMulticastClient para la
comunicación vía Wi-Fi (broadcast en grupo multicast)
Utilizar XNA para mostrar la imagen (modelo en 3D)
Dispositivo con ID 1 tiene la “hora oficial” El resto pide la hora a cada segundo y se utiliza
la hora con menor latencia
Windows Phone Microsoft Corporation.24
XNA en SpaceSync Se carga el modelo 3D y el font de manera estándar
font = this.contentManager.Load<SpriteFont>("gameFont"); myModel = this.contentManager.Load<Model>("Model/p1_wedge");
Cada dispositivo tiene el viewport ajustado de acuerdo a su ID
Se procesan en gesture drag en OnUpdate, para desplazar el modelo y enviarlo via broadcast
La rotación del modelo se calcula de acuerdo a la hora
Gracias!
25