curso de android
TRANSCRIPT
Desarrollo de Aplicaciones Móviles en Android Profesorado:
Jorge E. Carballo Franquis David D. Harjani Harjani
Director: José Luis Roda
Índice
• SQLite • Tabs • Closing
11/7/11 Desarrollo de Aplicaciones Móviles en Android 2
SQLite
• Base de datos relacional para sistemas embebidos
• Ocupa únicamente unos 225KB en memoria • No se trata de un proceso, sino de una librería que se añade dinámicamente a las aplicaciones que quieren uWlizar SQLite
• Implementa la mayor parte del estándar SQL-‐92, pero con restricciones
• Soporte para ALTER_TABLE limitado • Las columnas no Wenen Wpos
11/7/11 Desarrollo de Aplicaciones Móviles en Android 3
SQLite
• Existen diferentes herramientas, como sqlite3, disponible desde sqlite.org
• Existen un plugin de Firefox para visualizar bases de datos SQLite (recomendado)
• Se uWliza internamente en Firefox y Thunderbird
• Lo uWlizan la mayoría de las plataformas móviles (iOS, Android, WP7, BlackBerry OS, webOS)
11/7/11 Desarrollo de Aplicaciones Móviles en Android 4
SQLite en Android
• Existen múlWples formas de atacar SQLite • Nosotros veremos una en la que separamos el acceso a la base de datos del objeto Java que representa cada fila de la base de datos
• No existen las claves ajenas o foráneas, y en el caso de necesitarlas, debemos forzarlas “a mano”
• Es relaWvamente fácil conectar una base de datos a una lista
11/7/11 Desarrollo de Aplicaciones Móviles en Android 5
SQLite en Android
• La base de datos está protegida dentro de la memoria interna del disposiWvo
• Mientras trabajamos con el emulador (donde tenemos acceso root), podemos extraer (con DDMS) el archivo de la base de datos y visualizarlo
• En general, el acceso suele ser rápido
11/7/11 Desarrollo de Aplicaciones Móviles en Android 6
SQLite en Android
• Nosotros queremos guardar un objeto Java (un JavaBean o un POJO) en una base de datos
• El objeWvo es que cada fila de la tabla de la base de datos represente unívocamente a un objeto Java
• Por tanto, necesitamos dos clases: – Objeto Java con modificaciones – Clase SQLiteOpenHelper
11/7/11 Desarrollo de Aplicaciones Móviles en Android 7
SQLite en Android
• En nuestro objeto Java tendremos los siguientes métodos:
11/7/11 Desarrollo de Aplicaciones Móviles en Android 8
-‐ public sta+c Cursor getAll(SQLiteDatabase db) {} -‐ public sta+c DbCryptoAlgorithm
loadFrom(SQLiteDatabase db, long id) {} -‐ public DbCryptoAlgorithm loadFrom(Cursor c) {} -‐ public long save(SQLiteDatabase db) {}
SQLite en Android
• La SQLiteOpenHelper es una clase que exWende la anterior para crear nuestras tablas en la base de datos
• Además, conWene información como el nombre de la base de datos, el nombre de la tabla y la versión actual del esquema
11/7/11 Desarrollo de Aplicaciones Móviles en Android 9
SQLite en Android
• Los métodos de la clase que exWende SQLiteOpenHelper son:
11/7/11 Desarrollo de Aplicaciones Móviles en Android 10
-‐ public void onCreate(SQLiteDatabase db) {} -‐ public void onUpgrade(SQLiteDatabase db, int
versionAn+gua, int versionNueva) {} -‐ public void onOpen(SQLiteDatabase db) {}
Pestañas
• Las pestañas o Tabs facilitan la navegación en nuestra aplicación
Creación de Pestañas
• Se necesitara un TabHost y un TabWidget • El TabHost deberá ser el nodo padre del layout – TabWidget (Pestañas) – FrameLayout (Contenido de las pestañas)
• Dos formas de implementación – Diferentes Views en la misma acWvidad – Diferentes acWvidades
Cada pestaña una acWvidad
• Cada acWvidad será una de nuestras pestañas <?XML version="1.0" encoding="ur-‐8"?> <TabHost xmlns:android="htp://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientaWon="verWcal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" android;padding="5dp" /> </LinearLayout> </TabHost>
AcWvidad principal
• Deberá extender de TabActivity • En el método onCreate() TabHost tabHost = getTabHost(); // The acWvity TabHost TabHost.TabSpec spec; // Reusable TabSpec for each tab Intent intent; // Reusable Intent for each tab // Create an Intent to launch an AcWvity for the tab (to be reused) intent = new Intent().setClass(this, ArWstsAcWvity.class); // IniWalize a TabSpec for each tab and add it to the TabHost spec = tabHost.newTabSpec("arWsts").setIndicator("ArWsts", res.getDrawable(R.drawable.ic_tab_arWsts)) .setContent(intent); tabHost.addTab(spec);
tabHost.setCurrentTab(getIntent());
Closing
• More… – Google I/O 2009 – Google I/O 2010 – Google I/O 2011 – Autores
• Mark Murphy • Reto Meier • Ed Burnete
– Las API Demos que provee el SDK, hechas por el propio equipo de Android
11/7/11 Desarrollo de Aplicaciones Móviles en Android 15
Closing
• Seguridad en Smartphones – En la mayoría de procesadores, los algoritmos de cifrado más importantes están implementados en el chip (hard-‐wired)
– UWlizamos algoritmos de seguridad constantemente en Internet (redes Wi-‐Fi, protocolo HTTPS)
– Podemos acceder a ellos a través de la librería java crypto (pero no es trivial)
– Es recomendable guardar las contraseñas encriptadas, y si es posible, no usar algoritmos débiles como MD5, SHA-‐1
11/7/11 Desarrollo de Aplicaciones Móviles en Android 16
Closing
• Power Efficiency – Los Smartphones se construyen siguiendo la ideología System-‐on-‐a-‐Chip (SoC)
– Todos los componentes (procesador, módem [radios], adaptador de pantalla, cámaras, GPS, micrófonos, etc.) están en una sola placa o chip
– Un Smartphone no posee un único procesador, sino uno específico para determinadas funciones
– Cuando hablamos de un ARM11, ARM Cortex A8/A9, hablamos del procesador de aplicaciones
11/7/11 Desarrollo de Aplicaciones Móviles en Android 17
Closing
• La industria de hardware en smartphones es bastante diferente a la de los PCs
• Actualmente, hablamos de que una implementación de ARM Cortex A8 puede variar entre 1000 y 2000 MIPS (Million instrucWons per-‐second), siendo un procesador súper escalar
• Un ARM Cortex A9 alcanza perfectamente 4000 MIPS, con promesas de hasta 8000
• Los fabricantes de smartphones piden los componentes a disWntas empresas (la pantalla, los botones, los plásWcos, el SoC, etc.) y luego los ensamblan en sus fábricas
• La media de Wempo de desarrollo de un smartphone, desde su concepción hasta el mercado, es de 18 meses
11/7/11 Desarrollo de Aplicaciones Móviles en Android 18
Closing
• Actualmente, estamos entrando en la tercera generación de disposiWvos Android (Galaxy Nexus S, Samsung Galaxy S II, HTC SensaWon, LG OpWmus 2X)
• Comienzan a aparacer tablets con Android (Samsung Galaxy Tab 10.1, Motorola Xoom)
• La verdadera explosión de los teléfonos mul$ core (Cortex A9) está aún por llegar
• Intel, con su «Atom reducido», no sigue la arquitectura ARM sino la x86.
11/7/11 Desarrollo de Aplicaciones Móviles en Android 19
Closing
• Android es la plataforma que más está creciendo en popularidad en Estados Unidos, y ya ha superado a iOS como líder en cuota de mercado, pero sólo en smartphones
• Es líder en tráfico de móviles (según AdMob) superando incluso a iOS (anWguamente iPhone OS)
• En Europa está extendiéndose como plataforma, pero desgraciadamente la mayoría de usuarios no saben que Wenen Android ni lo que es
• Falta un mayor empuje de publicidad que resalte las buenas cualidades de los disposiWvos
11/7/11 Desarrollo de Aplicaciones Móviles en Android 20
Closing
• El mercado de aplicaciones móviles (tablets y smartphones) crece año tras año
• Se espera que el número de aplicaciones descargadas crezca de 8,2 mil millones de 2010 a los 17,7 mil millones en 2011
• Los beneficios obtenidos en 2010 por aplicaciones móviles se esWmó en 5,2 mil millones de dólares, y para 2011 se espera que crezca hasta los 15,1 mil millones – Fuente: GARTNER
htp://www.gartner.com/it/page.jsp?id=1529214
11/7/11 Desarrollo de Aplicaciones Móviles en Android 21
Closing
• ¿Por qué? • El consumidor general está comenzando a entender la existencia de los smartphones, ni los servicios que ofrece
• Los smartphones apenas representan un 10 ó 15% de las ventas de móviles, pero son los que más beneficios reportan a fabricantes y operadoras
• En los mercados emergentes, se produce un número millonario de altas nuevas cada mes
• La concienciación sobre los smartphones crece poco a poco, y el número de usuarios conWnuará aumentando
• Muchos creen que aún no se ha producido la verdadera explosión de usuarios
11/7/11 Desarrollo de Aplicaciones Móviles en Android 22
Closing
• Android Market – Actualmente está en pleno apogeo, con más de 500,000 aplicaciones
– No importa el número, sino la calidad – Para ser desarrollador, solamente es necesario pagar 25 euros una sola vez
– Podemos subir todas las aplicaciones que queramos, aparecen automáWcamente
– Si nuestra aplicación es de pago, no la veremos en nuestro disposiWvo (no podemos comprar nuestras aplicaciones)
– El raWo es 70% para el desarrollador y 30% para el operador, no Google
11/7/11 Desarrollo de Aplicaciones Móviles en Android 23
Closing
• Android Market – Existen diferentes estrategias para vender aplicaciones: publicidad, versiones “Donate”, etc.
– La posibilidad de realizar compras desde la propia aplicación abre paso a una vieja costumbre, el shareware
– Los pagos se realizan a través de Google Checkout – Como Android es libre, existen otros mercados que compiten con el Market; especial mención merecen la Amazon Android Appstore y Getjar
11/7/11 Desarrollo de Aplicaciones Móviles en Android 24
Closing
• Eficiencia – Cuando programamos para un ordenador, hacer un bucle como: • for (int k = 0; k < S[i][j]*R[i][j] + 1; k++)
– No Wene graves consecuencias, pero en un móvil sí, porque repeWmos el gasto de batería para la misma operación
– De hecho, este bucle «clásico» ya es ineficiente: • For (int i = 0; i < myString.length; i++)
11/7/11 Desarrollo de Aplicaciones Móviles en Android 25
Closing
• Eficiencia – Cuando escribimos código y llamamos código desde las acWvidades, estamos ejecutando desde el hilo de la UI
– Si el código que ejecutamos tarda más de 5 segundos, Android detectará que la UI ha dejado de responder ante el usuario y le preguntará si quiere cerrarla
– Debemos separar el código lento en un nuevo hilo, y mantener el hilo de la UI ocupado con un ProgressDialog
– También podemos hacer uso de los Tasks, que son clases que nos permiten ejecutar código en hilos disWntos a la UI con una interfaz pre-‐definida
11/7/11 Desarrollo de Aplicaciones Móviles en Android 26
Closing
• ¿Es importante tener un disposiWvo Android de verdad como desarrollador? – La respuesta es siempre SÍ
11/7/11 Desarrollo de Aplicaciones Móviles en Android 27
Closing
• ¿Vale la pena gastarse tanto dinero? – Depende de si vamos a inverWr horas en desarrollar aplicaciones y colocarlas en el Android Market
11/7/11 Desarrollo de Aplicaciones Móviles en Android 28
Closing
• Hay tantos disposiWvos que no sé cuál comprar. ¿Qué es lo ideal? – Lo ideal es tener uno de cada Wpo de pantalla – La pantalla y los controles marcan la diferencia entre un disposiWvo y otro; podemos hacernos una idea de cómo funciona un pad en lugar de un teclado, pero no podemos imaginarnos una pantalla con una determinada resolución
• Lo que recomendamos es tener 2 disposiWvos: uno de gama baja/media (HTC Wildfire S, HTC Legend, etc.) y uno de gama alta (Galaxy Nexus, Samsung Galaxy S II, HTC SensaWon,…)
11/7/11 Desarrollo de Aplicaciones Móviles en Android 29
Closing
• ¿Algo más que se les ocurra?
11/7/11 Desarrollo de Aplicaciones Móviles en Android 30
Closing
¡¡¡Gracias!!!
Jorge Carballo Franquis ([email protected])
David Dinesh Harjani Harjani ([email protected], @dinesharjani)
11/7/11 Desarrollo de Aplicaciones Móviles en Android 31