Hoy, vamos a hablar acerca de la clase DeviceStatus, y la información que podemo pobtener del dispositivo de un usuario utilizando esta clase.
¿Qué podemos saber acerca de un usuario?
Esta es una pregunta que yo me hago muy a menudo, y generalmente la respuesta es “muy poco”. Tu nunca tendrás acceso al número del teléfono, dirección del correo, o identidad del usuario, a menos que ellos decidan dártelos a ti. Lo que podemos saber sin embargo, es aún información útil, incluso si solo se trata de elementos de usabilidad. Aquí hay una lista de la información que la clase DeviceStatus puede saber.
Fabricante del dispositivo
Nombre del dispositivo
Versión del Firmware
Versión de hardware
Memoria total disponible
Cantidad de memoria usada al momento
Limite de memoria utilizada
Pico de uso de memoria
Disponibilidad de teclado físico
Estado de despliegue de teclado físico
Fuente de poder actual
Nosotros podemos también ajustar los eventos para notificarnos si el teclado o estado de la fuente de poder cambian. Vamos a echar un vistazo a cada uno de esos puntos de información, y como podemos utilizarlos. Para acceder a cualquiera de estas propiedades, necesitarás agregar la sentencia siguiente en la cima de tu código.
using Microsoft.Phone.Info;
Ninguna de estas propiedades te permitirá únicamente identificar un dispositivo específico, sino que te permiten determinar el modelo, la versión del software, etc. Esto puede resultar útil si estás tratando de optimizar para hardware específico, por ejemplo. En la aplicación de ejemplo para este artículo nosotros estaremos escribiendo todos los valores a un TextBlock con un nombre similar. Estaremos llenando los espacios en blanco de la siguiente pantalla.
Fabricante del dispositivo (cadena)
Como tu esperarías, esta propiedad te muestra el nombre del fabricante del dispositivo que que usuario tengan en la mano. En el emulador, este valor se desplegará como “Microsoft”. Para acceder a esta propiedad necesitas la siguiente sintaxis.
txtFabricante.Text = DeviceStatus.DeviceManufacturer;
Nombre del dispositivo (cadena)
Este es el nombre específico del dispositivo, pero no siempre es el nombre que tu esperarías. Por ejemplo, yo tengo un HTC Arrive, el cual está en la red de Sprint. Sin embargom cuando yo corro esta aplicación en mi teléfono, el nombre del dispositivo aparece como T7575, el cual es el nombre que HTC usa para el dispositivo en específico. Para obtener este nombre, de la clase de DeviceStatus, puedes utilizar el siguiente código.
txtDispositivo.Text = DeviceStatus.DeviceName;
Esta también es una valiosa pieza de información si deseas detectar cuando nuevos teléfonos comienzan a ser probados por los fabricantes. Para reportarte a ti mismo los nombres que encuentres, serás uno de los primeros en saber cuando un dispositivo esté en su camino al mercado.
Versión de firmware (cadena)
La versión del firmware es quizá no muy interesante, porque tienes demasiadas versiones de firmware a debido a los diferentes dispositivos. Sin embargo, el firmware es una pieza de información que puede indicarte si la actualización de un teléfono ha sido hecha o no. Por ejemplo, la versión de firmware de mi HTC Arrive es 2305.13.40301.651, la cual representa la versión de Mango. Para acceder a esta información, utiliza la siguiente sintaxis.
txtFirmvare.Text = DeviceStatus.DeviceFirmwareVersion;
Versión del hardware (cadena)
Como muchos usuarios del Samsung Focus han descubierto, la versión de hardware puede significar un gran trato de diferencia entre dispositivos similares. En el caso de que aún no lo hayas escuchado, hay teléfonos Samsung designados a la versión 1.3 y 1.4. Aparentemente los teléfonos Focus 1.3 tienen un gran reto recibiendo actualizaciones, pero al final son el mismo teléfono. Para determinar que versión de hardware está utilizando tu usuario, puedes usar el siguiente código.
txtHardware.Text = DeviceStatus.DeviceHardwareVersion;
Memoria total del dispositivo (long)
Este es el monto físico de RAM que esta disponible en el dispositivo del usuario. No es leer el mismo valor que el dispositivo menciona en su empaque, en su lugar, estará disponible la RAM del dispositivo, después de que el SO tome aproximadamente 166 MB de memoria, además de la consumida por algunas otras aplicaciones que estén ejecutándose en segundo plano. Para determinar este número, usa la siguiente sintaxis.
txtMemoriaTotal.Text = DeviceStatus.DeviceTotalMemory.ToString();
Uso actual de memoria de la aplicación (long)
Para aplicaciones que usen una cantidad de memoria significativa para operar, es importante monitorear cuanta memoria queda disponible. El límite por aplicación es de 90 MB, así que es importante asegurarse de que no excedas ese número. Para determinar el consumo de memoria de la aplicación actual, usa esta sintaxis.
txtUsoDeMemoria.Text = DeviceStatus.ApplicationCurrentMemoryUsage.ToString();
Limite de consumo de memoria de la aplicación (long)
Cuando creas aplicaciones con un consumo de memoria intensivo, este número es uno muy importante al cual ponerle atención. Es el valor máximo de memoria que el proceso de tu aplicación puede utilizar. Este valor es regresado como el número de bytes disponibles.
txtLimiteMemoria.Text = DeviceStatus.ApplicationMemoryUsageLimit.ToString();
Consumo del pico de memoria de la aplicación (long)
Otra propiedad relacionada al manejo de memoria, esta propiedad te permite determinar cual ha sido el pico de consumo de memoria que has utilizado. Si tu estuvieras monitoreando las dos propiedades anteriores cuidadosamente, entonces tu podrías conocer este valor, pero aún así es una información muy importante mientras depuras tu aplicación. Para obtener este valor, utiliza el siguiente código.
txtPicoMemoria.Text = DeviceStatus.ApplicationPeakMemoryUsage.ToString();
Hay teclado presente (boolean)
Esto podría parecer un poco ridículo de checar, pero hay muchas razones por las cuales querrías saber si un usuario tiene un teclado físico disponible en su dispositivo. Quizá tu quieras usarlo como un control para juegos, o como teclas rápidas para un juego de opción múltiple. Conociendo si el usuario tiene un teclado, puedes tomar ventaja de ese hardware adicional en una variedad amplia de formas. Para acceder a este valor, utiliza el siguiente código.
txtTecladoFisico.Text = DeviceStatus.IsKeyboardPresent.ToString();
Hay teclado mostrado (boolean)
“Mostrado” puede ser una palabra grandiosa para desplazar el teclado en tu teléfono, pero nosotros ciertamente podemos determinar si el teclado ha sido mostrado. Tanto como saber si el teléfono incluso tiene un teclado, esta es una pieza importante de conocimiento. Sin embargo, quizá encuentres importante saber si un usuario tiene su teclado desplegado o no, y esta es la forma de detectarlo:
txtTecladoDesplegado.Text = DeviceStatus.IsKeyboardDeployed.ToString();
Debido a que este valor puede variar en cualquier momento, también tenemos la habilidad de monitorear este valor con un manejador de eventos. Para hacer esto, necesitas definir el manejador de eventos cuando comienzas la aplicación de la siguiente manera:
void DeviceStatus_KeyboardDeployedChanged(object sender, EventArgs e)
El método del manejador de eventos para este es solo otra revisión manual de la propiedad que checamos al principio de la sección. La única diferencia es que en esta ocasión, necesitamos hacerlo en un hilo por separado, Para hacer esto, nuestro método se vería como esto:
void DeviceStatus_KeyboardDeployedChanged(object sender, EventArgs e)
{
Dispatcher.BeginInvoke(() => txtTecladoDesplegado.Text = DeviceStatus.IsKeyboardDeployed.ToString());
}
Fuente de poder (objeto)
La fuente de poder es quizá el elemento mas importante de toda la lista. Teniendo la habilidad de conocer cuando tu usuario a conectado su teléfono a corriente o esta siendo usado por batería puede cambiar como aprovechas las actividades de tu aplicación. Escogiendo una tonelada de nuevas imágenes o información mientras tu usuario usa la batería puede ser una decisión muy poco costeable, así como esperar que usen acertadamente el acelerómetro podría ser difícil con el cable de corriente conectado. Hay bastantes razones para saber que opción de energía está utilizando el usuario, y aquí está el como detectarlo:
txtFuentePoder.Text = DeviceStatus.PowerSource.ToString();
Muy parecido a como la propiedad de “IsKeyboardDeployed”, la fuente de poder tiene otra propiedad que puede cambiar en cualquier momento. Crea un manejador de evento como este:
void DeviceStatus_PowerSourceChanged(object sender, EventArgs e)
Y el método que tu necesitas para este evento también requiere un hilo aparte, así que usaremos el método “Dispatcher.BeginInvoke” para mover este proceso a un hilo separado.
void DeviceStatus_PowerSourceChanged(object sender, EventArgs e)
{
Dispatcher.BeginInvoke(() => txtFuentePoder.Text = DeviceStatus.PowerSource.ToString());
}
RESUMEN
La clase DeviceStatus nos da acceso a un mundo de información acerca del dispositivo del usuario, pero es lo suficientemente vaga como para no ser increíblemente importante. Lo dicho, cada una esas propiedades tiene un valor distinto por sí sola, y en las circunstancias correctas, un desarrollador estará muy agradecido por poder obtener esta información de los dispositivos de sus clientes.
Como vistazo final, tu aplicación al estar trabajando, se verá mas o menos de la siguiente forma.
Para descargar este código como un proyecto de trabajo que puedas desplegar en tu propio teléfono, da clic en el enlace inferior y juega con la solución. Cada post en la serie tendrá un proyecto de compañía, así que asegurate de descargarlo y jugar para poder entender cabalmente cada tema.
Mañana veremos, como adentrarnos dentro del tema de amigable de Alarmas y Recordatorios. Te mostraré como enviar recordatorios en tu teléfono incluso si tu aplicación no esta ejecutándose. Nos vemos mañana!!
