Sie sind auf Seite 1von 49

Descubriendo Android

Indice:
1. Objetivos 2. Qu es Android? 3. Cmo debemos preparar nuestro equipo 4. Nuestro primer proyecto: HOLA MUNDO 4.1 Los archivos de nuestro proyecto 4.2 Pantallas 4.3 Uso del programa 4.4 Pasos en la creacin del programa 4.4.1 Diseo 4.4.2 Lgica 5. De qu trata la geolocalizacin? 6. Nuestro segundo proyecto: MAPS POINT 6.1 Pantallas 6.2 Uso del programa 6.3 Pasos en la creacin del proyecto 6.4 Crear el proyecto 6.4.1 Diseo 6.4.2 Lgica 7. Novedades de la ltima versin: SQLite 7.1 Pantallas 7.2 Como hemos realizado el proceso de actualizacin 8. SQLite Database Browser 9. Qu ms podramos incluir? 10. Documentacin 3 3 4 7 9 10 10 12 12 14 20 20 20 21 25 25 26 27 34 34 37 47 48 48

1. Objetivos Vamos a introducirnos en el mundo de Android a travs de sencillos pasos. Veremos que es Android y con un par de prcticas como empezar a sacarle partido. Esto nos llevar a conocer un poco como se estructura y trabaja este sistema operativo y algunos de los usos que podemos darle, mediante sencillas aplicaciones.

2. Qu es Android? Android es el sistema operativo de Google pensado para mviles y basado en linux. Se puede considerar como el enemigo n1 del iOS (S.O. de Apple). Aunque estaba destinado al uso en mviles de ltima generacin, ya se puede encontrar en tabletas digitales e incluso en algunos netbooks. Ha salido ya una versin beta para ordenador aunque an no es demasiado funcional. Su mayor virtud es que es libre y gratuita, lo que da mucha libertad a los desarrolladores para modificar el cdigo y trabajar sobre l. Para la gente con conocimientos JAVA le ser muy fcil empezar a programar con el SDK de Android.

3. Como debemos preparar nuestro equipo

Paso 1: Descargar e instalar un entorno de trabajo, por ejemplo Eclipse. Descargar por ejemplo la versin Eclipse IDE for Java Developers. La instalacin consiste simplemente en descomprimir el zip en la ubicacin deseada. Paso 2: Descargar el SDK de Android. Se puede descargar desde http://developer.android.com/sdk/index.html. Una vez descargado, de nuevo bastar con descomprimir el zip en cualquier ubicacin. Paso 3: Descargar el plugin Android para Eclipse. Google pone a disposicin de los desarrolladores un plugin para Eclipse llamado Android Development Tools (ADT) que facilita en gran medida el desarrollo de aplicaciones para la plataforma. Podis descargarlo mediante las opciones de actualizacin de Eclipse, accediendo al men Help / Install new software e indicando la URL de descarga https://dl-ssl.google.com/android/eclipse/. Se debe seleccionar e instalar el paquete completo Developer Tools, formado por Android DDMS y Android Development Tools.

Paso 4: Configurar el plugin ADT. En la ventana de configuracin de Eclipse, se debe acceder a la seccin de Android e indicar la ruta en la que se ha instalado el SDK (paso 2).

Paso 5: Descargar los target necesarios. Los llamados SDK Targets de Android no son ms que las libreras necesarias para desarrollar en cada una de las versiones concretas de Android. As, para desarrollar en Android 1.6 tendremos que descargar su target correspondiente. Desde Eclipse debemos acceder al men Window / Android SDK and AVD Manager, y en la seccin Available Packages seleccionar e instalar todos los paquetes deseados.

Paso 6: Configurar un AVD. Para probar y depurar aplicaciones Android no tendremos que hacerlo necesariamente sobre un dispositivo fsico, sino que podremos configurar un emulador o dispositivo virtual (Android Virtual Device, o AVD) donde poder realizar fcilmente estas tareas. Para ello, volveremos a acceder al AVD Manager, y en la seccin Virtual Devices podremos aadir tantos AVD como se necesiten (por ejemplo, configurados para distintas versiones de Android). Para configurar el AVD tan slo tendremos que indicar un nombre descriptivo, el target de Android que utilizar, y las caractersticas de hardware del dispositivo virtual, como por ejemplo su resolucin de pantalla, el tamao de la tarjeta SD, o la disponibilidad de GPS.

4. Nuestro primer proyecto: HOLA MUNDO

No poda ser de otra manera, nuestro primer programa ser el clsico Hola Mundo! Una aplicacin sencilla para que veis como se estructura la informacin. Para empezar tendremos que decidir (si no lo hemos hecho ya) sobre que versin del S.O. pretendemos realizar la aplicacin. Hay diversas versiones del sistema, todas con nombres de dulces y acompaadas de una numeracin. Desde la 1.6 (Donut) hasta la 4.0 (Ice Cream Sandwich) que an no ha visto la luz, pasando por la 2.1 (Eclair), 2.2 (Froyo), 2.3 (Gingerbread)... En este caso hemos escogido la 2.2 (Froyo) pues es una versin muy actual y la que incluye mi mvil. As si queremos instalarla para probar que tal funciona, no tendremos problema alguno. Tambin debemos elegir algunas de las caractersticas del mvil al que se dirige, muy importante en el caso de la pantalla, pues no es lo mismo reproducir una aplicacin en un mvil de 4'' de pantalla que en uno de 3,2''. Todo esto se ha debido de configurar en los pasos 5 y 6 que hemos visto anteriormente. Dicho esto, pasemos a comenzar el proyecto.

Abrimos un proyecto Android (File/New/Android Project) y nos aparecer la siguiente pantalla:

Ah deberemos darle un nombre a nuestro proyecto, elegir un target de los que previamente cargamos (pasos 5 y 6) y dar un nombre a la aplicacin y al paquete donde se guardarn nuestras clases. En cuanto todo est correcto, solo quedar clicar sobre el botn FINISH y aparecern los archivos y carpetas de nuestro nuevo proyecto.

4.1 Los archivos de nuestro proyecto

Hay que tener una cosa clara. El diseo del programa est separado de la parte lgica del mismo. La parte referente al diseo se guarda en archivos XML en una carpeta llamada RES/LAYOUT. En esos archivos podemos crear botones, cuadros de texto, colocar imgenes y un sin fin de cosas simplemente con un clic o introduciendo el cdigo. Por otra parte esta la consabida parte lgica, la que se encarga de las realizar las operaciones que le demos al programa. Son los paquetes y archivos JAVA que conocemos. Estos se guardan igual que en cualquier proyecto java normal, en la carpeta SRC. La manera de relacionarse los objetos y los mtodos es a travs de ID de referencia. Estas ID se encuentran en un archivo que las crea automticamente y que recibe el nombre de R.java. Se guarda dentro de la carpeta GEN y no es modificable. Un ejemplo, si en un archivo XML creamos un botn, este automticamente aparecer referenciado en este archivo para que posteriormente sea utilizado por las clases JAVA. Dentro de la carpeta RES podemos encontrar carpetas como DRAWABLE (donde van las imgenes), VALUES (donde se encuentran los recursos de la aplicacin como las cadenas de texto), XML (que pueden ser otros archivos XML que utilicemos en la aplicacin), etc. Un archivo importante y que en general provoca a veces errores en las aplicaciones por olvidos en la configuracin, es el archivo ANDROIDMANIFIEST.xml. Se encarga entre otras cosas, de dar permisos al programa cuando se instala en el terminal como puede ser permisos para usar el GPS, conectarse a Internet, acceder a la agenda para realizar una llamada, etc. Aparte de eso da permiso a las ACTIVITY para su funcionamiento. Adems contiene la definicin de los aspectos principales de la aplicacin, como por ejemplo su identificacin (nombre, versin, icono, ). No est de ms revisarlo cuando la aplicacin fuerza el cierre y no ves el problema.

4.2 Pantallas Al ser un programa sencillo un par de pantallas sern suficientes. La primera una pantalla donde aparecer una etiqueta, un cuadro de texto y un botn para pasar a la siguiente pgina y la segunda que mostrar el mensaje y contendr otro botn que nos devolver a la primera pgina.

4.3 Uso del programa Despus de la instalacin del programa en nuestro mvil, aparecer entre nuestras aplicaciones un icono para iniciarlo. Tras esto se abrir la pantalla inicial y podremos introducir nuestro nombre en el cuadro de texto que aparece.

10

A continuacin presionaremos el botn Hola que aparece debajo del cuadro donde hemos introducido nuestro nombre y nos llevar a la siguiente pantalla donde nos mostrar un saludo con nuestro nombre y un mensaje flotante de que la operacin ya est finalizada.

Por ltimo haremos clic sobre el botn volver y este nos devolver a la pantalla inicial y con ello habremos finalizado la prueba del programa.

11

4.4 Pasos en la creacin del programa 4.4.1 Diseo Despus de crear el proyecto, lo primero es ir a la carpeta RES/LAYOUT y abrir el archivo MAIN.XML. Nos aparecer la pantalla y dos pestaitas que son Graphical Layout y main.xml. Es en la primera de ella con la que empezaremos. Vamos a aadirle un par de cosas. En primer lugar un cuadro de texto para que podamos introducir una palabra que ser nuestro nombre para recibir el saludo (EditText). Luego aadiremos tambin un botn (Button) para enviarnos a la siguiente pgina y una etiqueta o label (TextView) para colocarla sobre el cuadro de texto en la que ponga Nombre. Si damos a la pestaita de main.xml nos aparecer el cdigo de todo lo aadido. Donde podemos cambiar por ejemplo los nombres de ID de los botones y en el caso del TextView y Button la palabra que aparecer impresa.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/nombre" /> <EditText android:id="@+id/TxtNombre" android:layout_height="wrap_content" android:layout_width="fill_parent" /> <Button android:id="@+id/BtnHola" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hola" /> </LinearLayout>

12

Como ya coment, automticamente se crear en el fichero R.java el identificador del objeto aadido y en la carpeta RES/VALUES habr que aadir (si no est aadido ya) el valor hola, que en este caso es un String y que devolver la palabra Hola. Podemos tambin usar la instruccin siguiente:
<Button android:id="@+id/BtnHola" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hola"

A continuacin debemos crear una nueva pantalla donde se visualice nuestro mensaje. Creamos por tanto un un nuevo XML dentro de la carpeta RES/LAYOUT y le damos de nombre frmmensaje. Agregamos como hicimos en la otra pantalla los elementos que necesitamos, que en este caso sern un TextView para mostrar el mensaje de saludo y un Button para que nos de opcin de volver atrs en la pantalla. Damos el nombre a los ID de los elementos que queramos renombrar y vemos que el cdigo nos queda as:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/TxtMensaje" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="$mensaje"></TextView> <Button android:id="@+id/BtnVolver" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/volver" /> </LinearLayout>

13

4.4.2 Lgica Antes de nada nos falta crear otra clase para la pantalla que muestra el mensaje, la llamaremos FrmMensaje.java. Ahora vamos a nuestras clases para darle funcin a todos estos elementos.
public class HolaMundoActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre); final Button btnHola = (Button)findViewById(R.id.BtnHola); btnHola.setOnClickListener(new OnClickListener() { public void onClick(View v) { FrmMensaje.class); Intent intent = new Intent(HolaMundoActivity.this, Bundle b = new Bundle(); b.putString("NOMBRE", txtNombre.getText().toString()); intent.putExtras(b); startActivity(intent); }); } } }

Vemos que hay creado un mtodo onCreate y que dentro del setContentView nos indica la referencia al archivo main.xml, el archivo que guarda los objetos que vamos a utilizar. Primero creamos los elementos descritos anteriormente, como son el EditText y el Button:
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre); final Button btnHola = (Button)findViewById(R.id.BtnHola);

14

Y ahora dentro crearemos un mtodo setOnClickListener en el que incluiremos las instrucciones que queremos para que se lleven a cabo cuando pulsemos sobre el botn Hola que creamos en el main.xml (btnHola). Ahora para pasar de una pantalla a otra (ACTIVITY's) usamos los INTENTS. En este caso creamos el Intent de esta manera:
Intent intent = new Intent(HolaMundoActivity.this, FrmMensaje.class);

Con esto le estamos dando la ruta que debe tomar, es decir, le estamos diciendo que pase de la actividad donde estamos ( HolaMundoActivity.this) a la actividad que queremos acceder (FrmMensaje.class). Pero... un segundo... queremos pasarle adems informacin... Para ello utilizaremos la herramienta Bundle. Creando un objeto de tipo Bundle podemos pasarle la informacin que queramos sin problema alguno:
Bundle b = new Bundle(); b.putString("NOMBRE", txtNombre.getText().toString());

Con la orden putString primero damos un nombre para referenciarlo luego y despus una instruccin. Y solo queda aadirlo al intent creado con la opcin putExtras y darle la orden:
intent.putExtras(b); startActivity(intent);

Muy bien! Ya tenemos acabada nuestra primera pantalla. Ahora nos queda mostrar ese mensaje en la siguiente donde nuestra clase estara as definida:

15

public class FrmMensaje extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.frmmensaje); final Button btnVolver = (Button)findViewById(R.id.BtnVolver); TextView txtMensaje = (TextView)findViewById(R.id.TxtMensaje); Bundle bundle = getIntent().getExtras(); txtMensaje.setText("Hola " + bundle.getString("NOMBRE")); Toast toast1 = Toast.makeText(getApplicationContext(),"Listo!", Toast.LENGTH_SHORT); toast1.show(); btnVolver.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish(); } } } });

Como sabis, la clase debe ser extendida a Activity si no lo est, debe tener un mtodo onCreate como veis y el setContentView debe estar referenciado al xml que creamos al principio y que marca la pantalla en la que trabajamos en este momento (frmmensaje.xml). Creamos los objetos como hicimos antes, en este caso dos, el botn volver que nos devuelve a la pantalla anterior (btnVolver) el TextView del mensaje (txtMensaje):
final Button btnVolver = (Button)findViewById(R.id.BtnVolver); TextView txtMensaje = (TextView)findViewById(R.id.TxtMensaje);

Rescatamos la informacin que mandamos desde la otra pantalla en forma de Bundle creando el objeto y pasndolo al TextView que creamos justo ahora de esta forma:
Bundle bundle = getIntent().getExtras(); txtMensaje.setText("Hola " + bundle.getString("NOMBRE"));

16

Con esto ya tendramos el mensaje. Ahora vamos a ponerle un mensaje flotante que nos diga que ya est todo listo. Los mensajes flotantes se crean y se muestran con un Toast y de esta manera tan sencilla:
Toast toast1 = Toast.makeText(getApplicationContext(),"Listo!", Toast.LENGTH_SHORT); toast1.show();

Y ya solo falta darle instrucciones a nuestro botn volver. Crearemos un mtodo como hicimos con el btnHola que pusimos en la primera pantalla y solo le aadiremos la instruccin finish() que finaliza lo que estamos haciendo y nos devuelve a lo ultimo que hicimos anterior a esto, es decir, la anterior pantalla.
finish();

Y para finalizar abrimos el archivo MANIFIEST de nuestra raz del proyecto y debemos aadir las activities que no aparezcan y que hayamos creado. Si no producira un FC (los llamados cierres forzados de Android que tanta lata dan). El archivo quedara de esta forma:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.diego" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HolaMundoActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".FrmMensaje"></activity> </application> </activity> </manifest>

17

Por curiosidad y por no haberlo visto an, abrimos el archivo R.java que se genera automticamente en la carpeta GEN y que ha referenciado todos los objetos que hemos creado en el proyecto.
public final class R { public static final class attr { } public static final class drawable { public static final int icon=0x7f020000; } public static final class id { public static final int BtnHola=0x7f060003; public static final int BtnVolver=0x7f060001; public static final int TxtMensaje=0x7f060000; public static final int TxtNombre=0x7f060002; public static final int txtMensaje=0x7f060004; } public static final class layout { public static final int frmmensaje=0x7f030000; public static final int main=0x7f030001; } public static final class string { public static final int app_name=0x7f050001; public static final int hello=0x7f050000; public static final int hola=0x7f050003; public static final int nombre=0x7f050002; public static final int volver=0x7f050004; } }

Ya podemos probar nuestro programa. Para ello haremos uso del emulador que tenemos configurado en el AVD (Android Virtual Device). Bastar con que estemos en una ventana de alguna de las clases (OJO, nunca sobre los XML) y empezar a cargar el programa.

Tarda un rato pues simula totalmente la iniciacin del S.O. de Android y la instalacin de tu aplicacin. Si todo ha salido bien no deberamos tener problemas con la aplicacin.

18

Geolocalizacin

19

5. De que trata la geolocalizacin? Trata del uso de mapas y puntos para localizar lugares en cualquier parte del mundo. Es uno de los puntos fuertes de Android puesto que se vale para ello de uno de los recursos ms poderosos de Google: el Google Maps. Con una orden fijando latitudes y longitudes es capaz de situarnos sobre el mapa cualquier parte del mundo. Tambin con la infinita base de datos de pases, ciudades, calles, locales, empresas y un amplio etctera podemos movernos con seguridad y sabiendo qu puedo encontrar en una zona determinada y mucha informacin del lugar. En el siguiente ejemplo vamos a intentar explicar un poco ms sobre como podemos hacer todo esto llevndolo a nuestro mvil. 6. Nuestro segundo proyecto: MAPS POINT 6.1 Pantallas Constar de dos pantallas, una de inicio de la aplicacin y otra con un Google Maps donde estarn marcados los puntos de inters que nosotros aadiremos.

20

6.2 Uso del programa Al instalar nuestro programa en el mvil, este crear un icono de inicio al mismo en su sistema. Tambin podemos aadir un acceso directo en cualquier pantalla inicial del mvil como el de la siguiente imagen y seleccionarlo como vemos a continuacin:

Se abrir nuestra aplicacin con la pantalla de inicio y dos botones, MAPA (que nos llevar a la siguiente pantalla) y CERRAR (que cerrar la aplicacin). Pulsaremos la primera opcin: MAPA.

21

Aparecer una pantalla donde cargar un Google Maps y en el se marcarn todos los puntos previamente aadidos al programa. Si adems pulsamos la tecla de MENU aparecern las opciones en la parte de abajo de la pantalla.

Si seleccionamos la primera opcin CAMBIAR VISTA, automticamente nuestro mapa aparecer en la vista satlite (si estaba en mapa) o mapa (si estaba en satlite).

22

Si pulsamos sobre el mapa en un punto marcado (MARCADOR) nos saldr un mensaje de informacin sobre el punto de inters. Para volver atrs solo tendremos que pulsar la tecla ATRAS en nuestro mvil.

Tambin podemos pulsar en cualquier punto no marcado del mapa y nos aparecern los botones de zoom para acercarnos o alejarnos en el mapa. Tambin estn habilitados estos controles haciendo pinzamiento sobre la pantalla con dos dedos.

23

Damos al botn MENU de nuevo y pulsamos la opcin ACERCA DE... donde nos mostrar la versin del programa.

Por ltimo volvemos a pulsar la tecla MENU en nuestro mvil y elegimos la opcin VOLVER que nos llevar de nuevo a la pantalla inicial.

24

Por ltimo pulsamos CERRAR y cerraremos la aplicacin. El sistema Android no obliga a cerrar las aplicaciones porque las cierra automticamente si requiere de memoria para funcionar. De todas formas esto agiliza el sistema y no deja abierta la aplicacin cuando ya no la necesitamos.

6.3 Pasos en la creacin del programa 6.4 Crear el proyecto Lo primero fue escoger la versin de Android que utilizaramos y que requerir nuestro programa a la hora de instalarse en un dispositivo mvil. He escogido Android 2.2 (Froyo) con el bloque de API's 8 que nos ofrecen las Apps de Google, por dos aspectos: es de las versiones ms actuales y ms difundidas por los mviles con S.O. Android y adems la utiliza mi mvil, con lo que podr probar la aplicacin en l. Esto es esencial, he comprobado que hay cambios de probar la aplicacin en el mvil o el emulador. Creamos el proyecto con el nombre MAP y al trabajar con Google Maps, he necesitado pedir una Key para desarrolladores que me de permiso a trabajar con mapas para mi aplicacin. De otra manera no nos sera posible. Es gratuita.

25

6.4.1 Diseo Como ya he dicho son dos las pantallas que voy a utilizar en el programa. Solo necesito una pantalla de inicio y otra que muestre el mapa y sus localizaciones. Sus nombres son: main.xml y mapas.xml y estn incluidas en la carpeta layout. Main.xml es la pantalla inicial, consta de un ttulo, una imagen (portada.png), dos botones y unos textview que he usado de separadores. Es importante que tengamos en cuenta que los mviles cuentan con un sistema para reconocer la posicin del terminal, si esta en horizontal o vertical por lo que es vital que a la hora de colocar los objetos estos puedan casar bien en ambas posiciones o nos encontraremos con que faltan botones o la imagen excede de la pantalla.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightSum="1"> <TextView android:layout_height="wrap_content" android:text="Copyright 2011" android:gravity="right" android:id="@+id/txtCopyright" android:layout_width="match_parent"></TextView> <TextView android:textAppearance="?android:attr/textAppearanceLarge" android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/txtTitulo" android:text="MAPS POINT" android:gravity="center_horizontal"> </TextView> <TextView android:id="@+id/txtSeparador2" android:text="" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_height="wrap_content" android:layout_width="match_parent"> </TextView> <ImageView android:id="@+id/imgPortada" android:src="@drawable/portada" android:layout_height="61dp" android:layout_width="match_parent"> </ImageView> <TextView android:textAppearance="?android:attr/textAppearanceMedium" android:id="@+id/txtSeparador" android:text="" android:layout_width="match_parent" android:layout_height="8dp"> </TextView> <Button android:text="MAPA" android:id="@+id/btnMapa" android:layout_height="wrap_content" android:layout_width="match_parent"> </Button>

26

<Button android:layout_height="wrap_content" android:id="@+id/btnVer" android:text="LUGARES" android:layout_width="match_parent"> </Button> <Button android:layout_height="wrap_content" android:id="@+id/btnInsertar" android:text="INSERTAR NUEVO LUGAR" android:layout_width="match_parent"> </Button> <Button android:layout_height="wrap_content" android:text="CERRAR" android:id="@+id/btnCerrar" android:layout_width="match_parent"></Button> </LinearLayout>

Mapas.xml cuenta solo con la API de Google para trabajar con mapas. En ella debemos colocar el Key que antes pedidos a Google para trabajar con sus mapas. De esta manera cuando se active de manera automtica nos reflejar un mapa del mundo con el que trabajar.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <com.google.android.maps.MapView android:id="@+id/mMapView" android:apiKey="0zPjrOJrGeMYORaQNGCUpIdHqTG3nnUGesJ1Y7Q" android:clickable="true" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout>

6.4.2 Lgica Para ello he creado 3 clases: Main.java, GoogleMapsTestActivity.java y MyOverlay.java. La clase Main.java consta de un mtodo onCreate que da paso a los botones que incluimos en esta pantalla: btnMapa y btnCerrar.
public class Main extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button btnMapa = (Button)findViewById(R.id.btnMapa); final Button btnCerrar = (Button)findViewById(R.id.btnCerrar);

27

btnMapa.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent i = new Intent (Main.this, GoogleMapsTestActivity.class); startActivity(i); }); }

btnCerrar.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish(); }); } } }

Cuando creamos un botn, una referencia, enlazamos una imagen se utiliza el archivo R.java incluido en la carpeta Gen. Este archivo NO se puede modificar. Se crea solo cuando creas los objetos y se modifica automticamente. Da una referencia de cada objeto que usamos para utilizarlo luego al hacer uso de l.
public final class R { public static final class attr { } public static final class drawable { public static final int bubble=0x7f020000; public static final int icon=0x7f020001; public static final int portada=0x7f020002; } public static final class id { public static final int btnCerrar=0x7f050005; public static final int btnMapa=0x7f050004; public static final int imgPortada=0x7f050002; public static final int mMapView=0x7f050007; public static final int txtCopyright=0x7f050006; public static final int txtSeparador=0x7f050003; public static final int txtSeparador2=0x7f050001; public static final int txtTitulo=0x7f050000; } public static final class layout { public static final int main=0x7f030000; public static final int mapas=0x7f030001; } public static final class string { public static final int app_name=0x7f040000; } }

28

La siguiente clase creada ha sido GoogleMapsActivity.java en la que haremos varias cosas. En el mtodo onCreate crearemos el mapa y daremos luz verde a varios elementos que utilizaremos como son un MapView (esto es el mapa en si), MapController que es una herramienta para darnos control sobre l (hacer zoom, desplazarnos, centrarlo, etc.) y crearemos una lista de puntos que queremos representar en l adems de incluirlos en base a unas ordenes. Son los llamados itemizedOverlay. Puntos representados sobre el mapa con ayuda adems de una imagenmarcador (bubble.png) incluida en la carpeta drawable. Llevarn adems una descripcin del sitio marcado as como un nombre. La posicin nos la dar el GeoPoint, la herramienta que dir en que latitud y longitud se encuentra en el mapa cada punto y donde colocar el marcador sobre la capa MyOverlay, de la que an no hemos hablado. Aparte colocar unas opciones de men que se desplegarn cuando lo requiramos para cambiar la vista del mapa entre mapa y satlite, una opcin de volver a la pantalla inicial y otra opcin para informar sobre la versin del programa.
public class GoogleMapsTestActivity extends MapActivity { private MapView mapView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mapas); mapView = (MapView) findViewById(R.id.mMapView); mapView.setBuiltInZoomControls(true); List<Overlay> mapOverlays = mapView.getOverlays(); Drawable drawable = this.getResources().getDrawable(R.drawable.bubble); MyOverlay itemizedOverlay = new MyOverlay(drawable, this); //Introducimos direcciones de ejemplo: GeoPoint point1 = new GeoPoint((int)(43.556118*1E6), (int)(5.92007*1E6)); OverlayItem overlayitem1 = new OverlayItem(point1, "Nicer", "Servicios de consultora informtica S.L."); itemizedOverlay.addOverlay(overlayitem1); GeoPoint point2 = new GeoPoint((int)(43.555542*1E6), (int)(-

29

5.922233*1E6)); OverlayItem overlayitem2 = new OverlayItem(point2, "Ayuntamiento", "Prohibido dar de comer a los funcionarios"); itemizedOverlay.addOverlay(overlayitem2); GeoPoint point3 = new GeoPoint((int)(43.55522*1E6), (int)(5.920259*1E6)); OverlayItem overlayitem3 = new OverlayItem(point3, "Teatro Palacio Valds", "Aforo limitado"); itemizedOverlay.addOverlay(overlayitem3); //----------------mapOverlays.add(itemizedOverlay); MapController mapController = mapView.getController(); mapController.animateTo(point1); mapController.setZoom(18); } public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, 0, 0, "Cambiar Vista"); menu.add(0, 1, 0, "Volver"); menu.add(0, 2, 0, "Acerca de..."); return true; } public boolean onMenuItemSelected(int featureId, MenuItem item) { switch(item.getItemId()) { case 0: if(mapView.isSatellite()==true){ mapView.setSatellite(false); }else{ mapView.setSatellite(true); } return true; case 1: finish(); return true; case 2: Toast.makeText( getBaseContext(), "Versin 1.2a", Toast.LENGTH_SHORT).show(); return true; } return super.onMenuItemSelected(featureId, item); }

30

protected boolean isRouteDisplayed() { return false; } }

Y por ltimo la clase MyOverlay.java. Esta clase es la que nos permite crear una capa para mostrar nuestros marcadores, es decir, nuestros lugares. Cuenta con un arraylist para dar paso a cada uno de los puntos que introducimos en la clase GoogleMapsActivity.java y contiene los mtodos para colocar la imagen y crear el item. Pero adems incluimos el mtodo onTap, que controla que cuando pulsemos sobre un marcador muestre la informacin que hemos incluido de l.
public class MyOverlay extends ItemizedOverlay<OverlayItem> { private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>(); private Context context; public MyOverlay(Drawable defaultMarker) { super(boundCenterBottom(defaultMarker)); } public MyOverlay(Drawable defaultMarker, Context context) { this(defaultMarker); this.context = context; } protected OverlayItem createItem(int i) { return mapOverlays.get(i); } public int size() { return mapOverlays.size(); } protected boolean onTap(int index) { OverlayItem item = mapOverlays.get(index); AlertDialog.Builder dialog = new AlertDialog.Builder(context); dialog.setTitle(item.getTitle()); dialog.setMessage(item.getSnippet()); dialog.show(); return true; } public void addOverlay(OverlayItem overlay) { mapOverlays.add(overlay); this.populate(); } }

31

Por ltimo nos queda configurar el archivo AndroidManifiest.xml. Como sabemos ya, es un archivo de configuracin que nos dir la versin del programa (que podemos ir cambiando segn actualicemos), la versin API que usamos (8 en nuestro caso), la pginas que lanzar (lo que se llama Activity's) y una parte muy importante, los permisos que le damos al programa para trabajar con el SO del mvil. En este caso son dos, un permiso que deje a la aplicacin conectarse a datos y otro que deje activar el GPS.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.diego" android:versionCode="1" android:versionName="1.2a"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Main" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".GoogleMapsTestActivity"></activity> <uses-library android:name="com.google.android.maps" /> </application> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> </manifest>

En la carpeta values tenemos el archivo string.xml con el que podemos darle nombre a nuestra aplicacin para que salga escrito en nuestra pantalla.
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">MAPS POINT</string> </resources>

32

BASES DE DATOS

SQLite

33

7. Novedades de la ltima versin: SQLite Le hemos incluido alguna funcionalidad ms: Se ha creado una base de datos para incluir los lugares que se quieran utilizando SQLite y se aadieron lugares por defecto. Aadida funcin de bsqueda de lugares, donde puedes encontrar todos los sitios incluidos en la base de datos y al meter las letras van quedando solo los nombres coincidentes. Aadida funcin para elegir un nombre en la bsqueda y que de paso a una ventana nueva con toda la informacin del lugar recogida de nuestra base de datos. Se ha implementado una opcin en el men para aadir lugares a la base de datos. 7.1 Pantallas Como vemos, hemos aadido un par de opciones al men anterior. Una llamada LUGARES y otra INSERTAR NUEVO LUGAR. Podemos clicar sobre la primera.

34

Nos aparecer la lista de lugares ya insertados y una barra de bsqueda donde a cada carcter introducido nos aparecern las coincidencias con los lugares.

Cuando aparezca el lugar deseado podemos hacer clic sobre l y nos mostrar la informacin referente al lugar.

35

Ahora podemos dar al botn volver para que nos devuelva a la pantalla anterior y dando al botn volver de nuevo nos llevar al men principal.

Ahora entramos en la opcin que nos queda por ver que es INSERTAR NUEVO LUGAR donde podemos podemos meter los datos del nuevo sitio y que automticamente al aceptar queden registrados en la base de datos y nos aparezcan en la bsqueda de lugares que vimos antes. Con el botn volver regresaremos al men sin introducir nada en la base de datos.

36

7.2 Como hemos realizado el proceso de actualizacin Lo primero que hemos hecho ha sido crear la base de datos. Despus de intentarlo de varias maneras, lo ms sencillo ha sido crear una clase DBplaces.java donde creamos los campos que queremos guardar del lugar, sus constructores y los setter y getter del mismo.
public class DBplaces { private long id = 0; private String nombre = ""; private double latitud = 0; private double longitud = 0; private String descripcion = ""; public DBplaces(String nombre, double latitud, double longitud, String descripcion) { this.nombre = nombre; this.latitud = latitud; this.longitud = longitud; this.descripcion = descripcion; } public DBplaces(long id, String nombre, double latitud, double longitud, String descripcion) { this(nombre, latitud, longitud, descripcion); this.id = id; } public DBplaces(String nombre) { this.nombre = nombre; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public double getLatitud() { return latitud; } public void setLatitud(double latitud) { this.latitud = latitud; } public double getLongitud() { return longitud; } public void setLongitud(double longitud) { this.longitud = longitud;

37

} public String getDescripcion() { return descripcion; } public void setDescripcion(String descripcion) { this.descripcion = descripcion; } public long getId() { return id; } }

A continuacin una clase llamada DBHelper.java que ser la encargada de enlazar con la base de datos a partir de mtodos elaborados para los fines que requerimos, como por ejemplo conectar con la base de datos, cerrarla, crear la tabla en caso de que sea necesario, etc.
public class DBHelper { private static final String TAG = "DBHelper"; private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "places.db"; private static final String PLACES_TABLE_NAME = "places"; private Context context; private SQLiteDatabase db; private MyDBOpenHelper openHelper; public DBHelper(Context context) { this.context = context; this.openHelper = new MyDBOpenHelper(this.context); } public DBHelper open(){ this.db = openHelper.getWritableDatabase(); this.db = openHelper.getReadableDatabase(); return this; } public void close() { this.db.close(); } public static final class private Places() {} public static final public static final public static final public static final } Places implements BaseColumns { String String String String NOMBRE = "nombre"; LATITUD = "latitud"; LONGITUD = "longitud"; DESCRIPCION = "descripcion";

38

private static class MyDBOpenHelper extends SQLiteOpenHelper { MyDBOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + PLACES_TABLE_NAME + " (" + Places._ID + " INTEGER PRIMARY KEY," + Places.NOMBRE + " TEXT," + Places.LATITUD + " REAL," + Places.LONGITUD + " REAL," + Places.DESCRIPCION + " TEXT" + ");"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { to " Log.w(TAG, "Upgrading database from version " + oldVersion + " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS " + PLACES_TABLE_NAME); onCreate(db); } } public String selectPlace(String b) { Cursor cursor = db.query(PLACES_TABLE_NAME, null, Places.NOMBRE+"=?", new String[] {b}, null, null, null); cursor.moveToFirst(); String place = ("Nombre: " + cursor.getString(1) + "\nLatitud: " + cursor.getDouble(2) + "\nLongitud: " + cursor.getDouble(3) + "\nInformacin: " + cursor.getString(4)); return place; } public ArrayList<String> selectAllPlaces() { ArrayList<String> list = new ArrayList<String>(); Cursor cursor = this.db.query(PLACES_TABLE_NAME, null, null, null, null, null, Places.NOMBRE+" ASC"); if (cursor.moveToFirst()) { do { String place = cursor.getString(1); list.add(place); } while (cursor.moveToNext()); } if (cursor != null && !cursor.isClosed()) { cursor.close(); }

39

return list; } public long insertPlace(DBplaces place) { ContentValues values = new ContentValues(); values.put(Places.NOMBRE, place.getNombre()); values.put(Places.LATITUD, place.getLatitud()); values.put(Places.LONGITUD, place.getLongitud()); values.put(Places.DESCRIPCION, place.getDescripcion()); long id = db.insert(PLACES_TABLE_NAME, null, values); return id; } public void updatePlace(DBplaces place) { ContentValues values = new ContentValues(); values.put(Places.NOMBRE, place.getNombre()); values.put(Places.LATITUD, place.getLatitud()); values.put(Places.LONGITUD, place.getLongitud()); values.put(Places.DESCRIPCION, place.getDescripcion()); db.update(PLACES_TABLE_NAME, values, Places._ID+"=?", new String[] {Long.toString(place.getId())}); } public void deletePlace(DBplaces place){ db.delete(PLACES_TABLE_NAME, Places._ID+"=?", new String[] {Long.toString(place.getId())}); } }

Para comprobar que los datos estaban incluidos en la base datos hemos recurrido a instalar una aplicacin muy sencilla llamada SQLite database browser. Solo tenemos que descargar con nuestro emulador DDMS el archivo que contiene nuestra base de datos (data/data/nombre_package/databases/nombre_base_datos) y abrirlo con este programa. Despus de comprobar que todo es correcto hemos elaborado una clase VER.java junto a un layout ver.xml para aadir una funcionalidad de bsqueda en la base de datos. Recogemos los nombres de los lugares, los mostramos en un listview y aadimos una barra editText para que al introducir letras del lugar buscado vayan desapareciendo los lugares que no coincidan con lo que queremos encontrar.
public class Ver extends ListActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ver);

40

DBHelper db = new DBHelper(this); db.open(); final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, db.selectAllPlaces()); setListAdapter(adapter); EditText filterEditText = (EditText) findViewById(R.id.filterText); filterEditText.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { adapter.getFilter().filter(s.toString()); } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void afterTextChanged(Editable s) { }

});

db.close(); final Button btnVolver = (Button)findViewById(R.id.BtnVolver); btnVolver.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish(); } }); } { protected void onListItemClick(ListView l, View v, int position, long id) super.onListItemClick(l, v, position, id); Object o = this.getListAdapter().getItem(position); String keyword = o.toString(); Intent intent = new Intent(Ver.this, Info.class); Bundle b = new Bundle(); b.putString("OPCION", keyword); intent.putExtras(b); startActivity(intent); } } <?xml version="1.0" encoding="utf-8"?> <LinearLayout

41

xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/txtBusqueda" android:text="BSQUEDA" android:layout_height="wrap_content"></TextView> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/filterText"> <requestFocus></requestFocus> </EditText> <ListView android:layout_height="wrap_content" android:id="@+id/android:list" android:layout_width="fill_parent"> </ListView> <Button android:id="@+id/BtnVolver" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/volver" /> </LinearLayout>

Como puede apreciarse hemos incluido un botn para volver atrs.

Lo ltimo que hemos hecho ha sido aprovechar la bsqueda que hicimos para aadir una clase java llamada INFO.java donde podemos ver la informacin completa del lugar (nombre, latitud, longitud y descripcin) y su consecuente info.xml que en el que mostramos todo y aadimos el botn volver atrs.
public class Info extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.info); DBHelper db = new DBHelper(this); db.open(); TextView txtInfo = (TextView)findViewById(R.id.TxtInfo); Bundle bundle = getIntent().getExtras(); String b = bundle.getString("OPCION"); String descr = db.selectPlace(b); txtInfo.setText(descr);

42

db.close(); final Button btnVolver = (Button)findViewById(R.id.BtnVolver); btnVolver.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish(); }

}); } }

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/txtInformacion" android:text="INFORMACIN" android:layout_height="wrap_content"></TextView> <TextView android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/txtSeparador" android:text="" android:layout_height="wrap_content"></TextView> <TextView android:id="@+id/TxtInfo" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="$mensaje"></TextView> <TextView android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/txtSeparador2" android:text="" android:layout_height="wrap_content"></TextView> <Button android:id="@+id/BtnVolver" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/volver" /> </LinearLayout>

Como ltima novedad hemos creado una opcin en el men para incluir nuevos lugares a nuestra base de datos. Un botn Insertar nos lleva a un men que debemos rellenar con los datos del lugar y el botn aceptar los incluir en la base de datos SQLite. Para ello hemos creado dos clases ms Insertar.java y Aceptar.java con sus correspondientes archivos xml. La primera clase recoge los datos y los enva a la segunda que es la que los incluye en el archivo sql.

43

public class Insertar extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.insertar); final EditText txtNombre = (EditText)findViewById(R.id.txtNombre); final EditText txtLatitud = (EditText)findViewById(R.id.txtLatitud); final EditText txtLongitud = (EditText)findViewById(R.id.txtLongitud); final EditText txtDescripcion = (EditText)findViewById(R.id.txtDescripcion); final Button btnAceptar = (Button)findViewById(R.id.btnAceptar); btnAceptar.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(Insertar.this, Aceptar.class); Bundle a = new Bundle(); a.putString("NOMBRE", txtNombre.getText().toString()); Bundle b = new Bundle(); b.putString("LATITUD", txtLatitud.getText().toString()); Bundle c = new Bundle(); c.putString("LONGITUD", txtLongitud.getText().toString()); Bundle d = new Bundle(); d.putString("DESCRIPCION", txtDescripcion.getText().toString()); intent.putExtras(a); intent.putExtras(b); intent.putExtras(c); intent.putExtras(d); startActivity(intent); finish(); } }); final Button btnVolver = (Button)findViewById(R.id.BtnVolver); btnVolver.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish(); }); }

44

} public class Aceptar extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.aceptar); Bundle bundle = getIntent().getExtras(); String String String String nombre = bundle.getString("NOMBRE"); latitud = bundle.getString("LATITUD"); longitud = bundle.getString("LONGITUD"); descripcion = bundle.getString("DESCRIPCION");

double lat = Double.parseDouble(latitud); double lon = Double.parseDouble(longitud); DBHelper db = new DBHelper(this); db.open(); DBplaces place = new DBplaces(nombre, lat, lon, descripcion); db.insertPlace(place); db.close(); finish(); } } <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/txtInsertar" android:text="Insertar Lugar" android:layout_height="wrap_content"></TextView> <EditText android:id="@+id/txtNombre" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Introduzca nombre"> <requestFocus></requestFocus> </EditText> <EditText android:id="@+id/txtLatitud" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="numberDecimal" android:text="Introduzca latitud"></EditText> <EditText android:id="@+id/txtLongitud" android:layout_width="match_parent"

45

android:layout_height="wrap_content" android:inputType="numberDecimal" android:text="Introduzca longitud"></EditText> <EditText android:id="@+id/txtDescripcion" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textMultiLine" android:text="Introduzca descripcin"></EditText> <Button android:id="@+id/btnAceptar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/aceptar" /> <Button android:id="@+id/BtnVolver" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/volver" /> </LinearLayout> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> </LinearLayout>

Como cabe recordar, hay que aadir las activity's a nuestro archivo manifiest para que no nos salte un cierre forzado de la aplicacin.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.diego" android:versionCode="1" android:versionName="1.4a"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Main" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".GoogleMapsTestActivity"></activity> <activity android:name=".Ver"></activity> <activity android:name=".Info"></activity> <activity android:name=".Insertar"></activity> <activity android:name=".Aceptar"></activity> <uses-library android:name="com.google.android.maps" /> </application> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> </manifest>

46

8. SQLite Database Browser Esta aplicacin que se puede descargar en esta direccin: http://sourceforge.net/projects/sqlitebrowser/ , nos ayudar a abrir una base de datos creada. Esto es til para saber si los datos estn correctamente subidos y ordenados, asi descartamos cualquier incidencia de este tipo cuando nos de un cierre forzado en la aplicacin y no sabemos de donde puede venir el fallo. Se descarga en nuestro equipo, se instala y en el DDMS solo tenemos que descargar el archivo cuando emulamos la aplicacin. Para descargarlo debemos abrir en el DDMS la pestaa File Explorer y buscar en la ruta: data/data/paquete_de_datos_que_usamos/databases/archivo.sql Lo seleccionamos y a la misma altura de la pestaa FILE EXPLORER pero ms a la derecha tenemos Pull a file on the device con el que descargaremos el archivo al ordenador. Luego con el SQLite Database Browser lo abrimos y ya podemos incluso hacer las consultas que queramos para comprobar que funciona correctamente.

47

9. Qu ms podramos incluir? Un mtodo por el que el GPS localice nuestra posicin y nos coloque en el mapa para saber donde nos encontramos. Algunas restricciones al introducir datos en la base SQLite. Que para mostrar los datos sobre el mapa los recupere desde la base de datos SQLite. 10. Documentacin La mayor parte de la informacin con la que me apoye fue sacada de: http://www.sgoliver.net/blog/ http://www.android-spa.com

48

49

Das könnte Ihnen auch gefallen