Este documento presenta una introducción a las funcionalidades avanzadas de desarrollo de aplicaciones para Windows Phone 7.5, incluyendo el uso de tiles, deep application linking, lectura de códigos de barra, carga de rutas en Bing Maps, fast application switching, y el uso de XNA y sockets para la sincronización en tiempo real de aplicaciones móviles.
2. 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
3
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!
5
Windows Phone Microsoft Corporation.
6. Funcionalidades agentes en Background
Permitido
6
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ólopuedeusarbackground audio APIs)
Windows Phone Microsoft Corporation.
7. Live Tiles (ii)
Detectar si un dispositivo tiene más de 256MB
DeviceExtendedProperties.GetValue("ApplicationWork
ingSetLimit");
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);
7
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
8
Windows Phone Microsoft Corporation.
9. Secondary Tiles
- Deep Application Linking
- Clase StandardTileData
- ShellTile.ActiveTiles
- URIs de destino
9
Windows Phone Microsoft Corporation.
10. Leer un código de barra
10
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);
11
Windows Phone Microsoft Corporation.
12. Un pequeño ejercicio con mapas
12
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(Downloa
dRecorridoCompletedEventHandler);
wc.DownloadStringAsync(uri, rec);
13
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"], …]]
14
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];
15
Windows Phone Microsoft Corporation.
16. Notificar pantalla desde ViewModel
16
Instalar MVVM Light
install-package mvvmlight
Para enviar mensaje desde ViewModel:
Messenger.Default.Send<RecorridoDescargad
oMessage>(new
RecorridoDescargadoMessage());
Para recibir mensaje desde pantalla:
Messenger.Default.Register<RecorridoDesca
rgadoMessage>(this, (action) =>
ReceiveMessage(action));
Windows Phone Microsoft Corporation.
17. Crear objetos en Bing Maps
17
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)
18
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
19
Windows Phone Microsoft Corporation.
20. Ciclo de vida en WP 7.5
Restaurar estado!
IsAppInstancePreserved
Estado preservado!
== false
IsAppInstancePreserved ==
true
ejecutando
Guardar estado!
activada
Tombstone
a la app
más antigua
Tombstoned
Resumiendo .. .
Fast App Resume
desactivada
durmiendo
Recursos liberados
Hilos y timers suspendidos
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
21
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?
22
Windows Phone Microsoft Corporation.
23. Solución
23
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
24
Windows Phone Microsoft Corporation.