[Windows 8] Apps Metro para desarrolladores Windows Phone 7.5 (4 de N)

Volvemos a la carga con un nuevo artículo de la serie!

En nuestro último artículo sobre el ciclo de vida de las aplicaciones Metro vimos como es posible activar nuestra aplicación en respuesta a un requerimiento del sistema (como una búsqueda) o a otras aplicaciones (presentándonos como objetivo para guardar archivos). Pero no profundizamos en como llevar a cabo estas tareas. En este artículo vamos a ver que son los contratos, como configurar nuestra aplicación para que indique que contratos soporta y como realizar comunicaciones entre aplicaciones.

Contratos

El concepto de contrato es nuevo en Windows 8, en Windows Phone 7.5 disponíamos de sistemas que nos permitía exponer nuestra aplicación como capaz de editar fotos mediante Picture extensibility o realizar búsquedas llamado App Connect. Los contratos obtienen esta idea y la extienden más allá, permitiendo nuevas formas de interacción.

Package.appxmanifest

Para que nuestra aplicación sea capaz de usar estas características, lo primero que tenemos que hacer es habilitar las que deseamos usar, esto lo conseguiremos haciendo doble click sobre el archivo Package.appxmanifest de nuestra solución, que nos permitirá configurar nuestra aplicación. Esta pantalla, se divide en cuatro secciones distintas: Application UI, Capabilities, Declarations y Packaging:

Application UI nos permite configurar detalles sobre la interface de usuario de nuestra aplicación: rotaciones soportadas, nombre, iconos, etc…

image

Capabilities sirve para indicar que capacidades del sistema puede usar nuestra aplicación, lo que en Windows Phone se configuraba manualmente en el archivo WMAppManifest.xml, ahora con una interface más agradable:

image

Es importante que tengamos en cuenta que estas capacidades indican a qué tendrá acceso nuestra aplicación, una vez instalada, si deseamos cambiar alguna capacidad tendremos que desinstalarla y volver a instalarla.

Packaging nos ofrece datos generales sobre el paquete que se genera al compilar nuestra aplicación, el nombre de paquete, logo, el certificado a usar:

image

Declarations, nos lo habíamos saltado para poder tratarlo en más profundidad, la pestaña Declarations nos permite establecer y configurar los contratos a los que responderá nuestra aplicación:

image

 

Un Ejemplo FileSavePicker

Podemos seleccionar un elemento de la lista de available declarations y añadirlo a las supported declarations, en ese momento nos pedirá toda la configuración que necesite para poder funcionar. Si por ejemplo añadimos el contrato File save picker veremos sus valores de configuración:

image

Podemos configurar el tipo de archivo soportado, indicando sus extensión o eliminar todos los tipos y marcar el checkbox de soportar cualquier tipo, caso en el cual nuestra aplicación aparecerá como destino para guardar en todas las demás aplicaciones Metro, como por ejemplo al guardar un PDF desde la aplicación Reader:

image

Como vimos en el capítulo anterior, cuando el usuario seleccione nuestra aplicación en la lista de destinos para guardar, se activará mediante el evento OnFileSavePickerActivated, donde podremos establecer la UX que queremos mostrar al usuario:

OnFileSavePickerActivated
  1. protected override void OnFileSavePickerActivated(FileSavePickerActivatedEventArgs args)
  2. {
  3.     var page = new BlankPage();
  4.     page.Activate(args);
  5. }

Y en el método Activate de nuestra página, acceder al FileSavePickerActivatedEventArgs para obtener la información necesaria y mostrar la interface:

Activación de la página
  1. public void Activate(FileSavePickerActivatedEventArgs args)
  2. {
  3.     txtFile.Text = args.FileSavePickerUI.FileName;
  4. }

Si realizamos un Deploy de nuestra aplicación y a continuación abrimos un pdf por ejemplo, podremos ver los resultados. En la lista de opciones de guardar encontraremos nuestra aplicación.

¿Como saber cuando el usuario a presionado el botón guardar? Tenemos un evento en FileSavePickerActivatedEventArgs que nos indica exactamente esto: TargetFileRequested, en este evento podemos guardar el archivo donde deseemos:

Guardando un archivo
  1. async void FileSavePickerUI_TargetFileRequested(Windows.Storage.Pickers.Provider.FileSavePickerUI sender, Windows.Storage.Pickers.Provider.TargetFileRequestedEventArgs args)
  2. {
  3.     var deferral = args.Request.GetDeferral();
  4.  
  5.     args.Request.TargetFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(sender.FileName);
  6.  
  7.     deferral.Complete();
  8. }

Ya que la llamada es asíncrona, usamos un deferral para indicar a la aplicación Host cuando hemos terminado la operación mediante el método Complete(), siendo la aplicación host la encargada de mostrar la UX de espera al usuario:

image

Conclusión

En las aplicaciones Metro los contratos nos permitirán expandir nuestras aplicaciones mucho más allá de su interface de usuario, con lo que podremos crear nuevas formas de interactuar con el usuario y sus datos. En próximos capítulo veremos nuevos contratos como el de compartir o el de búsqueda y que implicaciones tenemos que tener en cuenta a la hora de usarlos. Como siempre, aquí tenéis el código de ejemplo del artículo de hoy, espero que haya sido de interés y ayuda.

Un saludo y Happy Coding!

2 comentarios en “[Windows 8] Apps Metro para desarrolladores Windows Phone 7.5 (4 de N)”

  1. Buenas Kiquenet… despues de leer la nueva pataleta de RFOG (porque lo que escribe normalmente no son artículos, son rabietas de niño pequeño) creo que lo del debate con alguien que prejuzga sin saber, es imposible!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *