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
- Android Development Tools
21.0.0.v201210310015-519525
com.android.ide.eclipse.adt.feature.group
The Android Open Source Project - m2e - Maven Integration for Eclipse
1.2.0.20120903-1050
org.eclipse.m2e.feature.feature.group
Eclipse.org - m2e - Android Configurator for M2E
0.4.2
me.gladwell.eclipse.m2e.android.feature.feature.group
Gladwell.me - 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:
- layout -> recursos por defecto.
- layout-sw600dp-port -> tableta de 7" vertical
- layout-sw600dp-land -> tableta de 7" horizontal
Los layouts se probaron en los siguientes equipos:
- Samsung Galaxy Nexus: ancho = 384dp.
- Samsung Galaxy Tab Plus: alto = 600dp.
- Asus Transformer Infinity TF700T: alto = 720dp