[WP7] Estados de certificado de una aplicación

Actualmente cuando terminados una aplicación para Windows Phone 7 y la subimos al MarketPlace de Microsoft para su certificado y posterior publicación, se nos va informando del estado en el que se encuentra este proceso de certificación.

Voy a enumerar al menos los que conocemos los usuarios del APP Hub:

Submission in Progress

Tienes que finalizar el proceso de subida de la aplicación pulsando el botón de finalización.

Ready for Testing

La aplicación todavía no ha sido introducida en el proceso de testing.

Testing in Progress

La aplicación se encuentra en la cola de testing a la espera de que un tester se encuentre disponible.

Ready for Signing

La aplicación ha pasado las pruebas de certificación y está preparada para pasar a la fase de publicación.

Ready for Publishing

En esta fase la aplicación es publicada automáticamente en el MarketPlace si así lo hemos elegido durante el proceso de subida, sino deberemos activar la publicación manualmente.

Published to Marketplace

La aplicación se encuentra publicada, aunque algunas veces tarda un día en aparecer en el MarketPlace.

Certification Failed

La aplicación ha fallado la publicación y tienes que arreglar la parte en la que falla, para ello Microsoft proporciona un reporte bastante concreto en mi opinión sobre como debería comportarse la aplicación y como reproducir el error en nuestro ordenador.

None

Si en algún momento te encuentras tu aplicación en este estado ponte en contacto con la gente de soporte pues puede que halla ocurrido algún error durante el proceso de subida.

 

Por último quiero indicar que el tiempo de publicación de una aplicación en el caso de que pase la certificación oscila entre cuatro y cinco días laborables.

 

Espero que os sirva, un saludo y que tengáis una buena entrada y salida de año Sonrisa

[WP7] Tombstoning o que hacer cuando nos llaman al movil

Como ya sabréis el cambio en la forma de desarrollar aplicaciones para Windows Phone 7 ha sido bastante radical con respecto a como se hacía en Windows Mobile 6.5. Ahora tenemos que seguir unas guías de estilo, tener en cuenta los botones del dispositivo, el contenido del programa, etc,. Pues bien, una de las diferencias más notables que podemos encontrar es la imposibilidad de correr mas de una aplicación al mismo tiempo, no hay manera de cambiar de una aplicación a otra  sin cerrar la primera (siempre que la aplicación no sea nativa del sistema).

Aquí voy a aclarar una expresión que ha llevado a muchas discusiones / criticas, que es: ¿¡Windows Phone 7 no proporciona multitarea!? la respuesta es por un lado “no”, no nos permite a los desarrolladores en general mantener nuestras aplicaciones en segundo plano al estilo de WM6.5 y por otro lado “si”, si permite multitarea pero lo restringe a las aplicaciones propias del sistema operativo (y supongo que a las aplicaciones de terceros a los que Microsoft de su consentimiento).

¿Por que han hecho esto así? bueno pues básicamente para dar más agilidad a la máquina y que no se produzca un desperdicio de recursos en el aparato, además disponemos de mecanismos como las notificaciones para avisar al usuario de cambios o actualizaciones de los datos de nuestro programa.

Esta restricción de la multitarea no solo es idea de Microsoft, antes que ellos ya la ha practicado Apple con su IPhone. En Android por ejemplo esta faceta no se controla, dejando al desarrollador al cuidado de estas tareas.

Pero vamos al tema del post de hoy “tombstoning”, como ya he dicho solo podemos tener ejecutándose una aplicación al mismo tiempo sin contar con las del sistema y además existen situaciones en las cuales el sistema se “apropia” de la pantalla, como es en el caso de las llamadas de teléfono. Cuando nos llaman al teléfono la aplicación que tenemos en pantalla se cierra inmediatamente y no tenemos opción de guardar la información con la que trabajábamos en ese momento.

Para estos casos tenemos el “tombstoning”, que nos permite programar el guardado automático de la información del programa cuando el sistema o nosotros detenemos su ejecución. Disponemos de algunos eventos para guardar o cargar nuestros datos, estos son:

  • Launching
  • Activated
  • Closing
  • Deactivated

Launching y Closing se producen cuando lanzamos la aplicación y cuando la cerramos, por otro lado disponemos de Activated y Deactivated que suceden cuando nos llaman al teléfono o pulsamos el botón de Volver.

Voy a mostrar un ejemplo en el que persisto el texto de un textbox y donde muestro la hora a la que se desactivo la aplicación.

Lo primero de todo es abrir Visual Studio y elegir un nuevo proyecto de tipo “Windows Phone Application”

imagen1

Lo creamos y abrimos la clase App.xaml.cs, aproximadamente a la mitad de la clase podemos ver los eventos que os comentaba arriba. Bueno ponemos el cursor del ratón en el evento Deactivated y haciendo uso de PhoneApplicationService guardamos la hora en la que el programa se interrumpe por una llamada:

1 private void Application_Deactivated(object sender, DeactivatedEventArgs e) 2 { 3 PhoneApplicationService.Current.State["desactivadoHora"] = DateTime.Now; 4 }

Ahora abrimos MainPage.xaml, veremos algo como esto:

imagen2

 

Tenemos que añadir a la interfaz un TexBox y un TexBlock para que quede de la siguiente forma:

imagen3

 

1 <Grid x:Name="LayoutRoot" Background="Transparent"> 2 <Grid.RowDefinitions> 3 <RowDefinition Height="Auto"/> 4 <RowDefinition Height="*"/> 5 </Grid.RowDefinitions> 6 7 <!--TitlePanel contains the name of the application and page title--> 8 <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> 9 <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/> 10 <TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> 11 </StackPanel> 12 13 <!--ContentPanel - place additional content here--> 14 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 15 <TextBox Height="279" HorizontalAlignment="Left" Margin="36,50,0,0" Name="textBox1" Text="" VerticalAlignment="Top" Width="384" TextChanged="textBox1_TextChanged" /> 16 <TextBlock Height="57" HorizontalAlignment="Left" Margin="36,361,0,0" Name="textBlock1" Text="" VerticalAlignment="Top" Width="389" /> 17 </Grid> 18 </Grid>

Ahora en el evento TextChanged del TextBox añadimos la siguiente línea:

1 private void textBox1_TextChanged(object sender, TextChangedEventArgs e) 2 { 3 PhoneApplicationService.Current.State["textoEscrito"] = textBox1.Text; 4 }

De esta manera guardamos el texto cada vez que cambia.

Cuando el programa se ve interrumpido por la llamada de teléfono y volvemos a la aplicación MainPage llama automáticamente al método OnNavigatedTo  (este evento ocurre cada vez que se carga una clase que deriva de Page). Nosotros lo sobrescribimos para que cuando se ejecute cargue los datos que hemos guardado anteriormente:

1 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 2 { 3 if (PhoneApplicationService.Current.State.ContainsKey("textoEscrito")) 4 { 5 textBox1.Text = (string)PhoneApplicationService.Current.State["textoEscrito"]; 6 } 7 8 if (PhoneApplicationService.Current.State.ContainsKey("desactivadoHora")) 9 { 10 textBlock1.Text = "La aplicación se desactivo a las: "; 11 textBlock1.Text += ((DateTime)PhoneApplicationService.Current.State["desactivadoHora"]).TimeOfDay.ToString(); 12 } 13 else 14 { 15 textBlock1.Text=""; 16 } 17 18 }

Simplemente tenemos que comprobar que existen las claves que indicamos y en caso afirmativo mostrar la información.

Ahora ejecutamos el programa e introducimos texto en el TextBox, para simular la llamada de teléfono o que abrimos otro programa pulsamos la tecla de Windows.

imagen4

imagen5

Cuando queramos ir hacia atrás, pulsamos la tecla de Volver y veremos una pantalla en la que se está recuperando la información:

imagen6

imagen7

Por último aquí podéis ver la información recuperada y la hora a la que el programa quedo inactivo.

Espero que os sirva a todos los que estáis programando en WP7, el código lo tenéis aquí abajo:

 

 

Saludos Sonrisa