Nota importante:

Esta es una aplicación desarrollada en 2012. No se ha necesitado actualizar desde entonces.

Introducción

Esta aplicación de android fue realizada por Roberto E. Zubieta durante su práctica profesional, entre Noviembre 2012 y Febrero 2013.

Como Compilar

Este programa requiere Apache Maven. Se utiliza para manejar las dependencias a librería externas. Normalmente Maven puede ser manejado desde linea de comando sin problemas, sin embargo resulta más conveniente manejarlo dentro de Eclipse.

El programa se hizo en Eclipse Juno

Plugins de Eclipse utilizados

  1. Android Development Tools
    21.0.0.v201210310015-519525
    com.android.ide.eclipse.adt.feature.group
    The Android Open Source Project
  2. m2e - Maven Integration for Eclipse
    1.2.0.20120903-1050
    org.eclipse.m2e.feature.feature.group
    Eclipse.org - m2e
  3. Android Configurator for M2E
    0.4.2
    me.gladwell.eclipse.m2e.android.feature.feature.group
    Gladwell.me
  4. ArcGIS for Android Core
    2.0.0.201206210956
    com.esri.arcgis.android.core.feature.feature.group
    ESRI.com

Configurar el proyecto

Una vez los plugins estén correctamente configurados, se importa el proyecto a Eclipse. Debe haber detectado automáticamente todas las propiedades. Para verificar revise si aparece en el proyecto un apartado que diga "Maven Dependencies" con la lista de bibliotecas que se requieren.

En caso de este apartado no aparecer se debe configurar manualmente. Se hace Click derecho sobre el proyecto abierto, aparece en el menú contextual la opción configurar ("Configure"). Se selecciona, y aparece otro menú contextual con la opción de "Configurar como proyecto de Maven". Entonces Eclipse comienza a buscar la dependencias de Maven y a descargarlas del internet. Esto tarda unos segundos.

Debe aparecer bajo el proyecto un apartado llamado "Maven Dependencies", y dentro de él una lista de librerías, ente las que se incluye RoboGuice, Guice, OSMDroid y Support-V4. Y de aquí en adelante ya se puede manejar el proyecto como siempre.

Maven se configura desde el archivo "pom.xml"

Librerías extras de Android

Para ejecutar el programa se requiere también una librería de android llamada "SlidingMenu" por Jeremy Feinstein. Está disponible en Github en esta dirección: https://github.com/jfeinstein10/SlidingMenu . Una vez importado dentro de eclipse se hace right-click sobre el proyecto Minos, se escoge "Properties" y se va a la sección Android. En la parte inferior aparecen las librerías extras de Android. Elimine todas las librerías que aparecen con error y escoga la librería recíen importada de "SlidingMenu". Apriete OK y salga del diálogo.

ArcGIS para Android

En la última versión se agregó la dependencia de ArcGIS para android, disponible en el sitio web de ESRI. Se requiere ese plugin para poder compilar las bilbiotecas de ArcGIS.

La aplicación ya debe poder correr.

Librerías Utilizadas

RoboGuice

RoboGuice maneja dos partes cruciales de este proyecto: Las anotaciones @Inject y el Event Manager. Se observa que todas las clases del proyecto contienen anotaciones @Inject entre los campos. Lo que sucede es que RoboGuice los inicializa automáticamente. Igual las anotaciones @InjectView y @InjectResource. El resultado es código extremadamente más sencillo y fácil de leer.

En vez de escribr este código:


ImageView mView;

void onCreate(Bundle savedState){
    mView = (ImageView) findViewById(R.id.imageview);
}

Se utiliza este otro:


@InjectView(R.id.imageview)
ImageView mView

void onCreate(Bundle savedState){
}

El eventmanager es un bus que lanza objetos de un lado al otro. Si yo llamo a

EventManager.fire(new FireDaLazeh());

entonces lo recibirá cualquier método de cualquier clase cuyo único parámetro sea ese objeto con la anotación


@Observes
public void firingMahLazeh( @Observes FireDaLazer pMyEvent ){
	//KABOOOM!
}

La única restricción es que la clase emisora y la clase receptora tienen que estar dentro del mismo Context (O sea, dentro de la misma Actividad, Servicio, o cualquier otra subclase de Context).

Support V4

Esta es la biblioteca de soporte de Android, que permite a a las aplicaciones anteriores de Honeycomb utilizar fragmentos y loaders. En este caso solamente se utiliza por dependencia de RoboGuice.

Recursos y Tamaños de Pantallas

La aplicación funciona en smartphones y tablets, de manera que requería que la distribución de las pantallas cambiara con respecto a la orientación y al tamańo del equipo. Optimicé las pantallas apuntando a los siguientes grupos:

  1. layout -> recursos por defecto.
  2. layout-sw600dp-port -> tableta de 7" vertical
  3. layout-sw600dp-land -> tableta de 7" horizontal

Los layouts se probaron en los siguientes equipos:

  1. Samsung Galaxy Nexus: ancho = 384dp.
  2. Samsung Galaxy Tab Plus: alto = 600dp.
  3. Asus Transformer Infinity TF700T: alto = 720dp