Archivo de la etiqueta: metro

Datos locales en aplicaciones Metro: Diccionarios clave-valor.

Hemos visto en artículos anteriores que es posible acceder a datos de un servicio remoto usando WCF, pero también tendremos casos donde nuestra aplicación necesitará guardar datos de manera local, ya sean opciones de configuración o ficheros locales.

En este artículo veremos cómo guardar datos empleando una de las maneras que nos ofrece WinRT, a través de diccionarios.

Guardando los datos

En primer lugar, agregar la instrucción using Windows.Storage; al fichero, para poder acceder a los detalles de la clase.

Para guardar los datos iremos al método OnSuspending:

void OnSuspending(object sender, SuspendingEventArgs e)
{
    //TODO: Save application state and stop any background activity
}

Dentro de este método accedermos a la variable que contiene la información local de nuestra aplicación:

ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;

En esta variable podremos, entonces, asignar los valores a la misma de esta manera:

localSettings.Values["tipoEntero"] = 10;
localSettings.Values["tipoString"] = "Una cadena de texto";

Con estas líneas, los datos se guardarán cuando la aplicación salga de primer plano. Recordemos que la aplicación no recibirá ningún aviso cuando, por limitaciones de memoria u otras causas la aplicación se cierre.

Cargando los datos

Para acceder a los datos cuando se vuelva a cargar la aplicación, se puede emplear el método OnLaunched, que carga los contenidos que necesita nuestra aplicación, y posteriormente lanza la pantalla inicial:

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    ...
}

La manera de acceder a los datos no podía ser más simple, una vez obtenida la variable localSettings como se ha mencionado anteriormente, se pueden acceder a los datos de la siguiente manera:

object valor = localSettings.Values[“valor”];

//Importante comprobar si tenemos el valor, ya que si se intenta hacer un casting antes se provocará una excepción.
if(valor != null)
{
    //Operar con valor (casting, etc...)
}

Conclusiones

Almacenar claves y valores en Metro es una operación muy sencilla que nos permite almacenar las opciones de configuración de nuestras aplicaciones. No es la única, ya que se pueden almacenar y cargar ficheros de texto, o usar estructuras más complejas, dejando esto último para el próximo artículo.

Como extra interesante se recomienda comprender cómo funciona el ciclo de vida de una aplicación Metro, para lo cual recomiendo este artículo de Josué Yeray, donde explica con detalle los diferentes escenarios que se pueden encontrar.

Referencias

Anuncios

Evento: Metro en Valencia

El pasado 3 de Abril me fui a la ETSE (Escola Tècnica Superior d’Enginyeria) de la Universidad de Valencia para hablarles de Metro, de desarrollo de aplicaciones para Windows 8, y de por qué es importante dar difusión al proyecto.

Tuvimos un interesante debate sobre qué tipos de aplicaciones encajan en la filosofía Metro y cómo un juego como Cut the Rope respeta esa filosofía, pese a que no tiene nada que ver con lo que esperamos de una aplicación de estilo metro, es decir, una tipografía clara, unos colores vivos, el número justo y necesario de opciones, entre otras.

Aquí dejo la presentación realizada con los ejemplos de código.

Ejemplos

Gracias a Samuel por la invitación y enhorabuena por la organización.

Hablando de Metro con los chicos del Mad.nug

Ayer pude asistir a la reunión mensual del grupo de usuarios de .net, esta vez como ponente, para hablar sobre 3 puntos: qué es metro, cómo nos afecta y cómo podemos aprovecharlo.

Estuvimos revisando conceptos tan maravillosos como el de baldosas vivas (live tiles) los encantos (charms) o las notificaciones tostada (toast notifications) que confirman lo que ya sabíamos, que nos encanta poner nombres intraducibles a las cosas, para que haya que decirlo en el idioma de turno (no hablemos de la siesta, que daría para otro post).

El evento tuvo un público excepcional, abanderado por el gran @davidsb, evangelista de cualquier cosa que se programe y/o se compile. Vimos las características que hacen únicas las apps Metro, cómo programar un cliente simple de Twitter con ellas (cariñosamente: Tweetstalker) y cómo aprovechar las características especiales que nos proporciona Metro para dar ese toque de distinción a nuestras apps.

Ejemplos

En este enlace podrás descargar el ejemplo completo visto en la charla.

Slides

Además, dejo las transparencias empleadas (disponibles vía slideshare)

Enlaces

Finalmente, algunos enlaces sobre temas que comentamos en la charla.

Me queda pendiente un artículo “Cómo sobrevivir tus primeros 3 días con windows 8 y no morir en el intento” :)

Eventos esta semana: Windows 8 por partida doble!

Esta semana (mañana sin ir más lejos) estaré dando un par de charlas de desarrollo con Windows 8 en dos localizaciones muy singulares.

Primera Ronda: 12:00 en la E.U.I.

La primera, a las 12h en la Escuela Universitaria de Informática de la UPM (cómo llegar) donde la pasada semana se organizó el CodeMotion. En esta charla, organizada por el DotNetClub de la facultad, daremos una introducción a Windows 8, veremos los diferentes lenguajes, las herramientas y algunos ejemplos de aplicaciones qué podemos hacer en él.

Segunda Ronda: 19:00 en Microsoft Ibérica

La segunda charla, a las 19h, en las oficinas de Microsoft Ibérica (cómo llegar) en La Finca en el marco del grupo de usuarios .net de Madrid Mad.Nug hablaremos, tras dar una introducción al sistema, de en qué nos afecta la llegada de WinRT como desarrolladores, y cómo sacarle provecho a las mejoras introducidas tanto a nivel de interfaz, interacción con el usuario y a nivel de código interno. Dejo el enlace de inscripción al evento (recomendable para agilizar el proceso en recepción) así como cómo llegar.

Más información y registro: Mad.Nug

Navegación entre páginas con Metro en C#

Salvo que estemos desarrollando una aplicación tremendamente sencilla, siempre tendremos la necesidad de cambiar entre diferentes ventanas de la misma. En este artículo hablaremos de navegación entre diferentes páginas de una misma aplicación Metro.

Introducción

Las aplicaciones en Windows 8 se caracterizan por tener una única pantalla mostrándose cada vez, siguiendo el estilo Metro, esto no implica que nuestras aplicaciones tengan que tener solamente una página, sino que tendremos que contar con un flujo de navegación, como muestra la siguiente imagen:

Flujo de navegación en una aplicación Metro

Flujo de navegación en una aplicación Metro

La primera idea de cómo ocurre la navegación la vemos en el proceso principal que carga la misma (situado en App.xaml.cs) y que contiene el método OnLaunched, que establece la página principal. Se genera una primera instancia del marco principal (Frame), y mediante este marco se navega a una nueva página, que es del tipo BasicPage1, que es la que se solicita en este caso como página principal.

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    // Create a Frame to act navigation context and navigate to the first page
    var rootFrame = new Frame();
    rootFrame.Navigate(typeof(BasicPage1));

    // Place the frame in the current window and ensure that it is active
    Window.Current.Content = rootFrame;
    Window.Current.Activate();
}

Para realizar la navegación entre varias ventanas de una aplicación se podrá reusar parte de este código, como muestra la siguiente línea, que se puede introducir dentro del cuerpo de cualquier función como resultado de la acción de un botón, por ejemplo.

    this.Frame.Navigate(typeof(Page2));

Al ejecutarse esta función, se selecciona la página actual, seguidamente se recupera el Frame correspondiente (que hemos visto cómo se creaba anteriormente) a partir del cual se navega a otra página, en este caso definida como Page2.xaml.

Entrada y salida en las páginas

Al igual que con Windows Phone (como comentábamos en este artículo), al navegar hacia o desde una página se ejecutan los comandos:

  • OnNavigatedTo (al convertirse en la página en primer plano)
  • OnNavigatedFrom (al abandonar el primer plano)

Este método nos puede ser de utilidad para realizar carga de datos, o para guardar el contexto actual al abandonar la misma.

Parámetros

Otra de las características de la navegación entre las diferentes páginas de Windows 8, es que permite el paso de parámetros de una manera bastante más sofisticada que la que comentábamos anteriormente con Windows Phone 7, y es que permite pasar, como parámetros, cualquier clase de objeto, como se muestra en los siguientes ejemplos:

Página origen, se pasa como parámetro una cadena de texto:

    this.Frame.Navigate(typeof(OtraPagina),"Estamos pasando un texto");

Página destino, se recupera el parámetro enviado y se hace un casting a string para operarlo como cadena.

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    string name = e.Parameter as string;
}

Conclusiones

La navegación entre páginas en una aplicación Metro nos proporciona una capa más de abstracción para el desarrollo de Software, de la misma manera que se nos proporcionaba con Windows Phone. Podemos además agregar opciones de navegación como Back, Home y similares, que se proporcionan con las plantillas incluidas en Visual Studio 11 Express for Windows Phone.

Más información

En MSDN:

Windows Store, el sitio donde exponer nuestras aplicaciones Metro

Hace apenas unas horas se han dado a conocer los detalles de la futura Windows Store, la tienda de aplicaciones de Windows 8 que permitirá a los desarrolladores publicar sus creaciones en más de 230 países diferentes con un click.

Detalle de la Windows Store

A continuación, algunos detalles interesantes sobre la nueva tienda:

  • Agregando unas pocas líneas a la web de la aplicación en cuestión, se podrá enlazar con la página de la tienda vía IE10, como se aprecia en este enlace.
  • Las aplicaciones Metro podrán soportar versión de prueba con opción de compra dentro de la propia aplicación.
  • Las aplicaciones empresariales podrán ser desplegadas directamente sin pasar por la infraestructura de la Store, así como establecer políticas de instalación para los ordenadores pertenecientes a un dominio.
  • Tendremos la opción de ofrecer versiones gratuitas, de prueba (limitadas por tiempo o por características) y de pago, además de la opción de compras in-app. Además podremos conservar modelos de negocio existentes (ya que Ebay, por ejemplo, tendrá aplicación para Metro y podremos seguir comprando como hasta ahora).
  • Existirá también la opción de financiar nuestras aplicaciones con publicidad, ya sea de Microsoft o de terceros.
  • De igual manera que ocurre en el Windows Phone Marketplace y en las iOS/Mac App store, las aplicaciones pasarán por un proceso de certificación, estando disponibles los requisitos en este enlace.
  • En lo que respecta a precios y cuotas, la cuota de registro para desarrolladores individuales será de $49, y $99 para empresas, y nos llevaremos el 70% de los ingresos que genere nuestra aplicación. Si obtenemos más de $25.000 con una aplicación, pasaremos a ingresar el 80%.
  • Se ha publicado un concurso para que las ideas más interesantes formen parte de la primera versión de la Windows Store, que saldrá al mercado con la versión Beta de Windows 8.

Es interesante cómo el ecosistema Metro se empieza a mover poco a poco. La fecha final de entrega de las aplicaciones en el concurso es el 3 de Febrero, así que puede que, para esas fechas, ya tengamos Beta de Windows 8.

Más información:

Live Tiles en Metro II, Tiles secundarios y tamaño doble

En el artículo anterior se veía cómo personalizar el tile principal de nuestra aplicación para agregar contenido dinámico. Sin embargo, otra de las opciones que nos da Windows 8, al igual que Windows Phone 7, es la de crear accesos secundarios a nuestra aplicación. Además, en el caso de Metro para Windows 8 tenemos la posibilidad de usar un tile de tamaño doble, pudiendo así dar más información.

En este artículo se verá cómo usar un tile de tamaño doble para mostrar más información sobre la aplicación así cómo generar un tile secundario para nuestra aplicación.

Tiles secundarios

Un tile secundario proporciona la capacidad de agregar accesos a la pantalla de inicio que, al cargarlos, se dirijan a una sección concreta de nuestra aplicación (En el ejemplo iremos a un proyecto concreto). Al cargar la aplicación, es importante destacar que lo que se abrirá es una instancia nueva de la aplicación, es decir, el hecho de que el tile esté presente no implica que la aplicación esté ejecutándose en segundo plano.

El primer paso es agregar la referencia al espacio de nombres Windows.UI.StartScreen:

using Windows.UI.StartScreen;

Una vez agregada, se pasa a definir una variable de tipo SecondaryTile, que contendrá la siguiente información:

  • Título
  • Título secundario
  • Argumentos de activación (donde podemos poner argumentos adicionales, como la ruta de la nueva página)
  • Logo

Posteriormente se genera una solicitud de creación de tile, que deberá ser aprobada por el usuario.

//Se establecen los atributos de activación
Uri logo = new Uri("ms-resource:images/Logo.png");
string tileActivationArguments = "ArgumentosDeActivacion";

//Se genera el tile
SecondaryTile secondaryTile = new SecondaryTile(MainPage.tileId,
    "Acceso Secundario",
    "Un ejemplo práctico",
    tileActivationArguments,
    TileDisplayAttributes.ShowName,
    logo);

//Se solicita al usuario que autorice la creación del tile, es importante la funcion de la palabra reservada await.
await secondaryTile.RequestCreateAsync();

El código mostrado se puede usar en un botón para agregar un elemento concreto, lo que implicará que, al pulsarlo, obtengamos la siguiente imagen:

Ventana de autorización para el live tile

Finalmente, quedaría comprobar los argumentos por los cuales se carga la aplicación. Esto se realiza en el método OnLaunched situado en el fichero App.xaml.cs, que recibe los argumentos de la aplicación, lo que permite procesar la información mediante el valor args.Arguments, que contiene los valores que hemos especificado antes, el resto es historia :)

Tiles de tamaño doble

Una ventaja adicional de Metro para Windows 8 son las tiles de tamaño doble, que permiten disponer de un espacio más amplio para mostrar mensajes. Es importante detallar que aunque cree un tile de tamaño doble será el usuario quien decida si usar la vista ampliada o reducida.

Para poder agregar un tile de tamaño doble, primeramente es necesario agregar un icono de tamaño doble (310×150) ya que de otra manera el sistema no será capaz de procesarlo. Para ello es necesario acudir a nuestro siempre socorrido Package.appxmanifest y agregar una imagen en el apartado Wide Logo:

El código empleado es muy similar al visto en el anterior artículo, con la diferencia de que este actualiza un texto, y la plantilla seleccionada es diferente.

void ActualizarTileDoble(string text)
{
    // Se obtiene desde la plantilla el documento XML que contendrá el XML del icono
    XmlDocument tileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWideText03);

    // Se edita el XML para agregar los datos deseados, en este caso será un atributo hijo que contendrá el texto
    XmlNodeList textElements = tileXml.GetElementsByTagName("text");
    textElements.Item(0).AppendChild(tileXml.CreateTextNode(text));

    // Se crea una notificación desde el XML editado
    TileNotification tile = new TileNotification(tileXml);

    // Finalmente, se actualiza el contenido de la aplicación
    TileUpdateManager.CreateTileUpdaterForApplication().Update(tile);
}

El resultado se muestra a continuación:

Resumen

En este, y en el anterior artículo se ha visto cómo crear tiles y usarlos desde la propia aplicación. El hecho de poder mostrar información contextual permite que los usuarios puedan acceder a información de la aplicación con ella cerrada, lo que permite que el usuario vuelva a ella, en comparación con otras que no posean estas características.

Más información: