«

»

nov 07 2011

Análisis del SDK 14: helado también para desarrolladores

Ahora que ya ha pasado un poco la fiebre por la novedad de Android 4.0 Ice Cream Sandwich, del cual ya hablamos en su momento en Androcode, vamos a centrarnos en lo que nos espera a nosotros, los desarrolladores. El análisis no será muy técnico, eso lo dejamos para tutoriales y otras cosas. Veamos algunos de los nuevos juguetitos que nos tiene preparado Google.
 

El pasado, pasado está… ¿o no?

Ahora veremos las novedades específicas que trae Ice Cream Sandwich, pero algo muy importante que no hay que olvidar es que con Android 4.0 también tendremos todas las mejoras de Honeycomb ahora también disponibles en teléfonos. Si habéis programado algo para Android 3.x (un servidor aún no ha tenido el placer) sabréis a qué me refiero, en resumen tenemos los Fragments, Content Loaders, widgets redimensionables (ya no sólo es cosa de algunos launchers personalizados), aceleración 2D por hardware, nuevo sistema de animaciones, arrastrar y soltar, soporte para entrada por teclado, ratón o mandos, y muchas más cosas. No más librerías de compatibilidad, ahora tenemos todo esto a nuestra disposición directamente en las APIs nativas.

 

Lo social cobra importancia

Sólo hay que observar los últimos movimientos de Google para darse cuenta de que quieren potenciar el elemento social. Ya lo mencionó el mismo Andy Rubin en unas polémicas declaraciones en las que decía que No deberíamos comunicarnos con el teléfono, sino con alguien al otro lado de él. Limitándonos a los datos objetivos y dejando las opiniones para otros, veamos cómo han querido empujar este carcácter social y comunicativo en Android.

Por un lado tenemos las Social APIs. Si leísteis el análisis que hicimos de las novedades de Ice Cream Sandwitch ya os sonará la aplicación People. Pues bien, no es un simple gestor de contactos, nos da la posibilidad de leer y escribir nuevos tipos de datos que necesitemos desde nuestras aplicaciones, o implementar directamente nuevas formas de conectar con nuestros contactos a través de nuestras aplicaciones. Iremos descubriendo más cuando empecemos a verlo en acción, pero estoy seguro de que se le puede sacar mucho partido a esto.

También sabréis que en ICS se ha actualizado la aplicación de calendario. Personalmente la actual siempre me ha parecido muy pobre, echaba de menos un calendario como el de iOS. Por lo poco que he podido probar en el emulador la nueva versión sí está a la altura. Pero no sólo eso, junto con la aplicación tenemos nuevas APIs para manejar los calendarios desde nuestras aplicaciones. En versiones anteriores existía una API pero no pública, y aquí voy a hacer un inciso para explicar algo.

En Android hay muchas APIs, la mayoría están públicamente disponibles y documentadas, pero hay otras “secretas” que no aparecen en la documentación porque los ingenieros piensan que no están aún bastante refinadas para salir al público o por cualquier otra razón, pero están ahí y dado que Android es libre se pueden encontrar viendo el código. Hay muchas de éstas, que algunas aplicaciones utilizan pero desde Google no aseguran su buen funcionamiento. Son, para entendernos, unas Betas. El calendario se encontraba en esta situación. Se podía acceder a una API para manejarlo, pero no estaba documentada y oficialmente soportada. Yo mismo la he usado en alguna cosilla y me ha dado ciertos problemas. Ahora la cosa cambia, la API de calendario se hace oficial, ahora será mucho más fácil usar los calendarios, eventos, recordatorios y demás en nuestras aplicaciones, disponiendo incluso de algunos Intents específicos para ahorrarnos trabajo. Muy bien esto, se echaba en falta.

También se incorpora una API de buzón de voz, de forma que cualquier aplicación pueda crear mensajes de voz para ser escuchados directamente desde la aplicación de teléfono en el registro de llamadas, teniéndolo unificado. Veremos de qué es capaz la creatividad de los desarrolladores. Hay una demo aquí.

Se incorpora una novedad importante, bautizada Android Beam. Con Gingerbread y el Nexus S, y más tarde Wallet, Google dejó claras sus intenciones de potenciar el uso del NFC, pero la tecnología no ha terminado de cuajar, le falta un empujón. Quizá éste sea Beam, permitiendo a los desarrolladores implementar un sencillo sistema para compartir información con otro dispositivo simplemente acercándolos, pudiéndolo aplicar a cosas tan diversas como intercambiar contactos, poner en marcha una partida de juego multijugador, unirse a un chat, compartir una foto, o muchas otras cosas que podamos imaginar. También nos brinda la posibilidad de usarlo como emparejador automático y abstracto para el usuario de bluetooth, en caso de que necesitemos transferencias más pesadas de las que nos permite el NFC. Por defecto si no configuramas nada en nuestra aplicación se comparte su URL del Market, para pasarnos las Apps de unos a otros. Mejor que los cromos, oiga. Aquí una app de ejemplo.

 

 

Multimedia, más “multi” y más “media”

La reproducción de contenidos es una parte muy importante de los móviles y sobre todo tablets de última generación, y desde luego ICS nos trae novedades en este sentido. Tenemos nuevas APIs de bajo nivel para la reproducción en Streaming de audio y vídeo, que permiten mayor control a los desarrolladores en este sentido.

Se introducen nuevas funcionalidades para la cámara. Zoom, foco, diferentes balances para diferentes zonas de la imagen, detector de caras y reconocimiento facial (que no es lo mismo).
También nos proveen un buen repertorio de filtros para transformar imágenes y vídeos apoyándose en OpenGL ES 2.0 y la GPU para obtener resultados mejores y más rápido, suficiente para usarse sobre Streaming de vídeo incluso. Nivel de color, brillo, distorsión, cortar, rotar… son cosas que ya hacen algunas aplicaciones, pero ahora tendremos como APIs para poder usar en cualquier aplicación.

Otra nueva API es para el control remoto de audio. No sé si a vosotros os habrá pasado, pero a mi muchas veces usando alguna aplicación de audio de terceros cuando intento usar los controles de música de mis auriculares, del lockscreen o la barra de notificaciones (con CyanogenMod) se hace un lío y las aplicaciones de música instaladas empiezan a volverse locas. Eso quedará en el pasado con ICS (o debería), porque esta nueva API permite a las aplicaciones ser manejadas por controles genéricos que no les pertenecen, y por supuesto retroalimentarlos con información sobre lo que se está reproduciendo. Aquí un ejemplo compatible con Android 2.1 que activa el control remoto en Android 4.0.

Además se introduce compatibilidad con nuevos codecs y contenedores multimedia. Para vídeo tenemos soporte de VP8, para audio AAC, y para imágenes WebP (derivado de VP8). También podremos usar el famoso contenedor Matroska (.mkv) para audio Ogg Vorbis y vídeo VP8.

 

Conectividad

Se introduce soporte para WiFi-Direct, que nos permite conextiones directas con otros dispositivos vía WiFi, sin punto de acceso y sin conexión a Internet. Es el estándar de la WiFi-Alliance destinado a sustituir al Bluetooth, con mayores velocidades y mejor seguridad. Ya estaba presente en terminales como el SGSII, pero ahora es una característica más de Android con sus APIs. Compartir archivos, fotos, vídeos con otros dispositivos o PCs, hacer streaming de contenidos (¿he oído Google TV?), conectarse para jugar en una partida en grupo o miles de cosas, hasta donde nuestra imaginación llegue.  Aquí una demo.

Se introduce también Bluetooth Health Device Profile (HDP), que hace uso del estándar IEEE 11073 para comunicación con equipos médicos. Esto puede afectar poco al usuario común, pero es una gran ventaja para el mundo de la salud, permitiendo crear aplicaciones que se comuniquen eficientemente con los equipos de este tipo. Seguro facilitará muchas cosas, veremos qué aparece en este sentido.

 

Lavado de cara, interfaz actualizada

En Android 4.0 se remodela toda la interfaz del sistema con un estilo renovado muy similar al holográfico de Honeycomb, en el que apreciamos la intervención de Matias Duarte. Gingerbread fue un entremés, ICS es el plato fuerte. Pero no se queda ahí, se nos brindan nuevos elementos con los que trabajar a los desarrolladores.

El nuevo GridLayout coloca a los elementos hijos en una cuadrícula rectangular, pero a diferencia del TableLayout todos los hijos están en un mismo nivel jerárquico plano. En vez de introducirse dentro de filas, los hijos se colocan en el GridLayout especificando qué filas y columnas deben ocupar (sí, en plural). Esto facilita la creación de interfaces como Dashboards o como la del nuevo Market que ya todos habréis visto, además de mejorar la velocidad de renderizado al estar todo en un mismo nivel. Podéis ver un pequeño ejemplo, parte del API Demos, aquí.

Se introduce un nuevo elemento, Texture View. Permite mostrar y manipular contenido OpenGL como si se tratase de un elemento más pudiendo moverlo, transformarlo o animarlo. Tal como nos lo han presentado, es la nueva versión del SurfaceView pero mejorada. Será muy práctico sobre todo en juegos, pero también en aplicaciones que hagan uso de la cámara o reproducción de vídeo por ejemplo. Más información aquí.

Tenemos un nuevo widget para usar en nuestras aplicaciones, el Switch. La funcionalidad es muy parecida al Checkbox o al ToggleButton, pero modernizado. Permite des/activarse pulsando sobre él o arrastrando la palanca. Me recuerda mucho a un control parecido de iOS. No es una novedad importante en cuanto a funcionalidad, pero sí en diseño.

Otra novedad, aunque ya estaba presente en Android 3.0, es el menú Popup. Estos aparecen como menú contextual junto a algún elemento de la pantalla, como lo que se puede ver en la aplicación de Google Music o la galería 3D. Pero en ICS se introduce renovado, permitiendo inflar el menú con un xml, y establecer un listener para cuando el menú es cerrado.

Una novedad importante a la hora de diseñar nuestras aplicaciones, ahora el tema por defecto de las aplicaciones será identificado por Theme.DeviceDefault, que puede ser distinto según el dispositivo. Así, la familia de temas Theme.Holo no cambiarán entre dispositivos, de forma que si se lo especificamos nuestra aplicación se verá igual sin importar la personalización de los fabricantes que a veces hacen los diseños inconsistentes.

 

Nuevos métodos de entrada, más formas de controlar nuestro Android

May the force be with you. Con la idea en mente de expandir Android y hacerlo compatible con el mayor número de dispositivos posibles, en ICS se introducen nuevos métodos de entrada. Ahora el sistema soporta distinción entre dedos, ratón, stylus y borrador. Y no sólo sobre la pantalla, también da soporte a tabletas digitalizadoras, permitiendo detección de presión, distancia e inclinación del stylus.

Se incluye un nuevo evento Hover, que nos informa cuando el puntero pasa por encima de un elemento (ya sea movido por el ratón u otro dispositivo). También se añade soporte para diferentes botones (primario, secundario, terciario, atrás y adelante), para poder hacer diferentes acciones en consecuencia. Todo esto va claramente más orientado a Tablets y TV que a móviles. Pero ahí lo tenemos. Podemos ver unos ejemplos de estas APIs aquí y aquí.

Otra importante novedad es que ahora el teclado y el diccionario pueden ir separados. Hasta ahora el diccionario y las sugerencias eran responsabilidad del propio teclado, en ICS pueden ir separados y no sólo en funcionalidad, también en disposición. Ahora las sugerencias pueden mostrarse como popups en el propio texto en vez de en el teclado, para correcciones de palabras por ejemplo. Algo de esto ya nos enseñaron en la presentación de ICS, y creo que va a dar mucho juego para mejorar los teclados, depende de lo que decidan hacer los desarrolladores.Como no todo es ratón y teclado, tenemos nuevas APIs para el text to speech. Ahora es más fácil de usar y de elegir el motor TTS que queramos (y que esté instalado, por supuesto). Además se soporta de forma oficial la construcción de motores TTS propios; esto antes era posible pero no estaba documentado. Un ejemplo aquí. Veremos lo que nos depara, cuanto más posibilidades mejor.

 

Control y optimización del uso de la red, que no somos de oro

Ya vimos en la presentación de ICS una importante novedad referente al control del uso de datos. Se trata de un apartado en las opciones del teléfono para ver detalladamente qué aplicaciones consumen más recursos, limitarlas según el tipo de conexión y bloquear el uso de datos de fondo. A mi me ha encantado. Ya hay en el Market aplicaciones para hacer cosas similares pero que yo sepa no con este nivel de control gracias a la integración en el sistema.

Pues bien, junto con esto Google nos echa una pequeña reprimenda a los desarrolladores, y nos recuerda que debemos tratar de hacer nuestras apps eficientes. Y es lógico, no todo el mundo tiene conexión de datos ilimitada y no debemos programar pensando así. Para ello nos recuerdan que debemos desarrollar estrategias para optimizar el uso de la red, dar opciones a los usuarios de elegir si quieren desactivar determinadas funciones según si estamos en WiFi o red móvil, o si estamos usando Roaming, de forma que el usuario no se decidirá por bloquearnos el acceso a la red tan fácilmente.

Además tenemos un nuevo Intent para marcar la actividad de nuestra aplicación en la que se configuran estos parámetros, para abrirla directamente desde el menú de opciones. Más trabajo, sí, pero sólo para hacer mejores aplicaciones.

 

Cinco sentidos, o casi

Se han añadido 2 nuevos tipos de sensores, de temperatura ambiente y de humedad. Claro que sólo funcionarán en teléfonos que traigan estos sensores, pero al menos se da soporte y se pasa el testigo a los fabricantes. Además se han mejorado los sensores de gravedad, rotación y aceleración mediante el uso del giroscopio (quien lo tenga).

 

ActionBar, ahora sí

Para algunos locos como yo ésta era la función más esperada. Una API oficial para el ActionBar, que tenía que llegar sí o sí tras lo visto en Honeycomb. Y no se limita a una adaptación compatible con teléfonos, se ha renovado y añadido nuevas funciones. Veamos algunas.

Quizá lo más notable sea lo que han llamado “split acion bar”, o Action Bar dividida. Se trata de una barra inferior opcional que podemos activar en nuestra aplicación o actividad en la que se mostrarán todos los Action Item, de forma que si hay muchos aparecerán ahí más en vez de agruparse en el ActionBar bajo ese botón “más” para los que no quepan. No es una extensión, si lo activamos no se mostrarán action items en la barra principal. Ya vemos este comportamiento por ejemplo en la aplicación de Maps (en ICS, por supuesto).
Y básicamente algunos cambios más para actualizar la API y hacerla compatible con teléfonos. Se acabó el uso de librerías de terceros.

 

Y hasta aquí el pequeño resumen / análisis de lo que nos espera a los desarrolladores con Android 4.0. Si queréis saber más podéis investigar la documentación y los ejemplos. Por nuestra parte, cuando tengamos la oportunidad de empezar a programar con estas nuevas APIs os iremos contando y explicando más cosas. Ojalá sea pronto.

 

Acerca del autor

Rafa Vázquez

Estudio Ingeniería Informática del Software en Sevilla. Me considero geek sin dinero, amante y desarrollador novato de Android. He creado algunas aplicaciones como SeviBus, TicTacDroide, Kill Bieber y Traductor Hoygan, si es que se puede llamar aplicaciones a estas dos últimas ;) Ganas de aprender más y más no me faltan, e intentaré compartir mis experiencias con vosotros en la medida de lo posible.