SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
Introducción a Android

 Y mis 25 consejos para los
  que empiezan en Android


MobileCONGalicia, Diciembre 2011
           Alberto Alonso Ruibal
        alberto.ruibal@mobialia.com
        T: @mobialia @albertoruibal
Quién soy
Ingeniero de Telecomunicación
                   System Manager
                   J2EE Developer
Desarrollador Android @ Mobialia
       Mobialia Chess / Internet Chess Club App
 Gasolineras España / Connect-4 / Trivial / Slot Racing
      MartinVars's RadioMe / Track my Followers
Mi blog: http://www.alonsoruibal.com
Mi empresa: http://www.mobialia.com
Estado de las plataformas móviles
              (USA)
Y por qué Android

●   Código abierto
●   550.000 activaciones diarias
●   Diversidad de dispositivos, fabricantes...
●   Porque tiene detrás a Google
Qué necesito para desarrollar

●   Un ordenador con Windows, MacOSX o Linux
●   Java SDK, y conocimientos de Java
●   Android SDK
http://developer.android.com/sdk/index.html
●   Eclipse + plugin ADT (es posible utilizar otros
    IDEs). Recomiendo el “Eclipse IDE for Java
    Developers”
http://www.eclipse.org/downloads/
Estructura del proyecto

src/         Código fuente
gen/         Archivos generados a partir de los recursos
assets/      Ficheros a los que va a acceder la aplicación
res/         Carpeta de recursos
 drawable/   Imágenes
 layout/     Disposición de elementos en pantalla
 raw/        Archivos de datos (sonidos por ejemplo)
 values/     Definición de textos, colores, estilos, etc
AnroidManifest.xml
Componentes de una aplicación

●   Actividades: Cada pantalla que se muestra es
    una “Actividad”, lo que muestra la actividad es
    un “Layout”
●   Servicios: Para aplicaciones que necesitan
    estar ejecutándose en segundo plano
●   Intents: Sistema de comunicación entre
    aplicaciones / actividades
Las actividades y su ciclo de vida

Cada Actividad es una
clase Java con
métodos estándar que
son llamados en los
distintos cambios de
estado
Hay que definir cada
actividad en el
AndroidManifest.xml
Diseñando pantallas: layouts
●   Se pueden crear desde código Java o bien
    definirlos en un XML (lo recomendado)
●   Todos los componentes de las pantallas pueden
    ser:
    ●   Viewgroups (cuando pueden tener “hijos”)
    ●   Views
●   El editor WYSIWYG incluido
en el ADT ahora funciona
y es usable
Los selectores de recursos

●   Se le añaden a las carpetas de recursos:
    ●   Por densidad de píxeles: -ldpi -mdpi -hdpi -xhdpi
    ●   Por tamaño de pantalla: -small -normal -large -xlarge
    ●   Por idioma: -es -pt -fr -it ...
    ●   Por orientación: -port -land
●   Se pueden combinar varios:
    res/drawable-mdpi-es
●   El sistema escoge el recurso adecuado en cada
    momento, y hace auto-escalado de las imágenes
Tamaños de pantalla
Densidades de pantalla




     HDPI                    MDPI                     LDPI

http://developer.android.com/guide/practices/screens_support.html
Empaquetado y distribución

●   La aplicación se empaqueta en un APK que se
    firma con un certificado
●   En el Android Market nuestra aplicación
    queda identificada con este paquete y este
    certificado
●   Ojo con perder el certificado o olvidar la
    contraseña... no podríamos actualizar la
    aplicación
Mis 25 consejos




Lo que me habría gustado saber hace dos años...
1# Para qué versión de Android
          desarrollar
●   Yo recomiendo que las aplicaciones para
    móviles sean compatibles con Android 1.6
●   Salvo APIs muy específicas (cámara,
    bluetooth..) suele llegar
●   Y desarrollar usando el SDK de la versión 4,
    ICS (por ejemplo la última versión de AdMob
    requiere >= 3.2)
●   Antes de publicar probar siempre
           en un emulador 1.6
2# Diseñar pensando en múltiples
      tamaños de pantalla
 Y dar siempre soporte a pantallas horizontales
3# Usar estilos en los layouts
●   Sistema similar a CSS en web
●   Permite reducir drásticamente el tamaño de los XMLs
●   Se define el estilo en styles.xml
  <style name="WhiteText">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">@color/white</item>
  </style>
●   Y se usa con “style=”:
<TextView style="@style/WhiteText"
android:text="@string/text1"/>

http://www.alonsoruibal.com/using-styles-on-android-layouts/
4# Usar includes
●    Permiten crear componentes que podemos
     reutilizar
●    Ejemplo, en un layout ponemos:
<include layout="@layout/component"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

●    Y definimos en component.xml el layout del
     componente incluído
●    Herramientas útiles del editor WYSIWYG del
     ADT “Extract includes” y “Extract styles”
5# Definir colores y dimensiones
●   Definimos los colores en colors.xml
<resources>

    <color name="text">#000000</color>

</resources>

●   Y las dimensiones en dimens.xml
<resources>

    <dimen name="text_size_small">14sp</dimen>

</resources>

●   Los usamos desde los layouts con @color/ y @dimen/
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"

 android:textColor="@color/text" android:textSize="@dimen/text_size_small"

 android:text="Text" />
6# No bloquear el thread principal
                   Dentro de una misma actividad:

    onCreate()      onResume()                           Handler.handleMessage()




                 t = new Thread(this)   handler.sendEmptyMessage(code);
                       t.start();


                                   Tarea pesada



● Realizar cualquier operación pesada en un thread separado
● Sólo podemos modificar el interfaz desde el thread principal
Si bloqueamos el thread principal...
7# Usar las preferencias
 ●   Forma fácil de almacenar propiedades sencillas
 ●   Pantallas estándard de preferencias, se pueden
     definir en XML
http://code.google.com/p/mobialia-wikiplaces/source/browse/trunk/res/layout/preferences.xml

 ●   Para obtener preferencias:
SharedPreferences sharedPref =
PreferenceManager.getDefaultSharedPreferences(this);

boolean booleanValue = sharedPref.getBoolean("booleanValue", true);

int intValue = sharedPref.getInt("intValue", true);

 ●   Truco: usar serialización JSON y luego guardar
     en las preferencias
8# Almacenando más datos

●   Android integra SQLite DB
●   Aunque es sencilla soporta grandes cantidades
    de datos (en una aplicación mía hasta 500.000
    datos por tabla)
●   Si queréis algo parecido a Hibernate, tenéis el
    Android Data Framework creado por
    @javielinux
http://code.google.com/p/androiddataframework/
9# Usar listviews y adapters
●   Forma óptima de mostrar pantallas con muchos datos
●   El ListView le pide al Adapter la View a mostrar en el
    momento que es necesaria (ahorra memoria)
●   Reutilizar views en el Adapter: mejora velocidad de la lista
public View getView(int position, View convertView,
                      ViewGroup parent) {
LinearLayout ll;
if (convertView != null) {
    ll = (LinearLayout) convertView; // Reciclamos!
else {
    ll = (LinearLayout) LayoutInflater.from(mContext)
     .inflate(R.layout.wikiplaces_adapter,
              parent, false);
}
10# Internacionalización con
             strings.xml
●   Nunca meter cadenas en el código, ponerlas en
    res/values con el selector de idioma (values-es,
    values-pt...)
●   Aplicación web para la traducción: PASTT
http://code.google.com/p/android-php-translator/
    ●   Poner en un único XML las cadenas y los arrays a
        traducir
    ●   Crear un XML separado con las cadenas que no
        necesitan traducción
●   Sitio web con servicio de traducción gratuito
    (thx @ilnuska) http://www.getlocalization.com/
11# Pasar datos en el Intent
●   Forma de enviar datos de una actividad a otra
    (bien de nuestra aplicación o entre aplicaciones)
●   En la actividad llamante:
Intent intent = new Intent(this, DemoActivity.class);

Bundle bundle = new Bundle();

bundle.putInt("intValue", 33);

bundle.putBoolean("booleanValue", true);

intent.putExtras(bundle);

startActivity(intent);

●   Y en la que recibe los datos (en el onCreate()):
Bundle extras = getIntent().getExtras();

int intValue = extras.getInt("intValue");

boolean booleanValue = extras.getBoolean("booleanValue");
12# Intents útiles ACTION_VIEW
 ●   Abrir el navegador web del sistema:
String uri = "http://www.mobialia.com";
Intent myIntent =
 new Intent(android.content.Intent.ACTION_VIEW,
      Uri.parse(uri));
startActivity(myIntent);

 ●   Abrir Google Maps Navigation:
String uri = "google.navigation:q=" + lat + "," + lon;
Intent myIntent =
 new Intent(android.content.Intent.ACTION_VIEW,
       Uri.parse(uri));
startActivity(myIntent);
13# Intents útiles ACTION_SEND

 ●   Share Intent (ACTION_SEND)
 String shareText = "texto a compartir";
 Intent intent = new Intent(android.content.Intent.ACTION_SEND);
 intent.setType("text/plain");
 intent.putExtra(android.content.Intent.EXTRA_TEXT,
                shareText);
 startActivity(Intent.createChooser(intent,
              getString(R.string.share_choose)));

 ●   Email Intent...
14# Interceptar URLs
●    Podemos configurar actividades para que
     intercepten determinadas URLs
●    Añadimos un intent filter en el
     AndroidManifest.xml:
<activity android:name =".MobialiaActivity">
<intent-filter>
    <action android:name="android.intent.action.VIEW"></action>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="http" android:host="mobialia.com"/>
</intent-filter>
</activity>
15# Usar el parser JSON
                  integrado
 ●   Recomiendo usar JSON cuando haya que
     obtener datos de un servicio externo
 ●   Android tiene JSONObject y JSONArray para
     parsear datos JSON
 ●   Ejemplo de uso en WikiPlacesData.java:
http://code.google.com/p/mobialia-wikiplaces/source/browse/trunk/src/com/mobialia/wikiplaces/WikiplacesData.java

 ●   Y en general antes de implementar algo,
     buscar si hay una API o librería que lo hace
17# Vigilar la memoria que
        consume la aplicación
●   Usar el Allocation Tracker del ADT para
    detectar dónde ocupamos memoria
●   Cada vez que entra el Garbage Collector
    supone una pausa de la aplicación que puede
    llegar hasta 100 ó 200 ms
●   Esto mata el framerate de cualquier juego
http://developer.android.com/resources/articles/track-mem.html
16# Cuidado al rotar la pantalla
●   Cada vez que se rota la pantalla de destruye la
    actividad y se vuelve a crear
●   El sistema tiene una memoria limitada para
    bitmaps, si se agota aparece el error:
Bitmap size exceeds VM budget
●   Y suele aparecer en el rotado de pantalla
●   Añadir al AndroidManifest.xml
    android:configChanges="orientation" y
    sobreescribir el método onConfigurationChanged()
    (thx @luiskap)
http://www.alonsoruibal.com/bitmap-size-exceeds-vm-budget/
18# Reproducir audio
●    Establecer el stream que controlamos con las teclas de
     volumen
setVolumeControlStream(AudioManager.STREAM_MUSIC);

●    SoundPool: creamos un “pool” de sonidos
private SoundPool soundPool;

private HashMap<Integer, Integer> soundPoolMap;

private void initSounds() {

    soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);

    soundPoolMap = new HashMap<Integer, Integer>();

    soundPoolMap.put(66, soundPool.load(this, R.raw.click, 1));

}

●    Y los vamos reproduciendo bajo demanda
soundPool.play(soundPoolMap.get(66), volume, volume, 1, 0, 1f);

●    Para cosas más avanzadas: AudioTrack
19# Crear aplicaciones 3D
●   Se utiliza la API de OpenGL ES
●   Librerías que facilitan su uso:
    ●   JPCT-AE (Código cerrado)
http://www.jpct.net/jpct-ae/
    ●   Min3D (Muy simple y de código abierto), mi favorita
http://code.google.com/p/min3d/
●   Con ambas podemos cargar modelos .3ds, .obj
●   Frameworks más complejos y multiplataforma: Unity
Un ejemplo de Min3D: Slot Racing
20# Integrar anuncios de AdMob
 ●   Forma fácil de obtener ingresos desde el primer
     momento
 ●   Pagan un mes a posteriori a través de Paypal
     (a primeros de Diciembre se cobra la publicidad
     de Octubre)
 ●   CPMs entre 0,20 - 0,40 USD
 ●   No funciona con apps locales
 ●   Cómo integrarlo:
http://code.google.com/intl/es/mobile/ads/docs/android/
 ●   Tiene House Ads para promoción cruzada
21# Usar Google Analytics
●   Las estadísticas de uso son imprescindibles
●   Con AdMob ya tenemos estadísticas de uso de la
    aplicación
●   Obtener el Analytics SDK de:
http://code.google.com/intl/es/mobile/analytics/download.html
●   Se registra la aplicación Android como un dominio más
●   Ejemplo de uso:
tracker = GoogleAnalyticsTracker.getInstance();
tracker.start("UA-2360573-11", this);
tracker.trackPageView("/main");
tracker.dispatch();
tracker.stop();
22# Publicar en el Android Market

 ●   Sólo por 25 USD (un sólo pago)
 ●   Cuidado con el certificado
 ●   Aplicar IVA a las ventas en Europa, para
     más temas fiscales:
 http://www.alonsoruibal.com/vender-en-android-market-desde-espana/
 ●   Los markets alternativos...
          ¡no funcionan!
23# Implementar compras dentro
         de la aplicación

 ●   Las aplicaciones que obtienen más ingresos
     usan compras dentro de la aplicación
 http://developer.android.com/guide/market/billing/billing_overview.html
 ●   Es complicado de implementar pero hay una
     librería desarrollada por Robot Media
     (@hpique) que lo simplifica:
 https://github.com/robotmedia/AndroidBillingLibrary
24# Usar el servicio de licencias
     del Android Market
●   Permite proteger nuestra aplicación contra la
    piratería
●   Sólo funciona en dispositivos con Android
    Market
●   Al integrarlo sólo podemos vender la app en en
    Android Market, para markets alternativos hay
    que adaptarla
●   A veces falla...
http://developer.android.com/guide/publishing/licensing.html
25# Dar soporte a los usuarios

●   Ocupa el 25% de mi tiempo de trabajo
●   Parte esencial del ciclo de vida de la aplicación:
    ●   Detección de errores
    ●   Consejos para mejoras
    ●   Mejora visibilidad, ratings de los usuarios, etc
●   En general la actualización frecuente de la
    aplicación mejora el posicionamiento en el
    Market
Dónde aprender más (I)


●   http://developer.android.com/index.html
●   http://android-developers.blogspot.com/
●   http://www.guidetotheappgalaxy.com/
●   http://stackoverflow.com
●   http://androcode.com   (@JMPergar @breogangf @kix2902)
Dónde aprender más (II)

Desarrollé la aplicación WikiPlaces como ejemplo para
LabAndroid Málaga. Esta aplicación contiene varios ejemplos
de cómo hacer muchas cosas comunes en Android
●   Pantalla inicial con un Dashboard
●   Crear pantallas de preferencias y obtener preferencias
●   Usar la API de Google Maps API (incluyendo overlays) y la
    Location API para obtener la ubicación
●   Usar servicios JSON externos
●   Listas y adapters
●   Lanzar aplicaciones externas con Intents
●   Integración con AdMob para mostrar anuncios
              http://www.mobialia.com/labandroid
Dudas, preguntas...



Gracias por vuestra atención!


        Alberto Alonso Ruibal
     alberto.ruibal@mobialia.com
       http://www.mobialia.com
     T: @mobialia @albertoruibal

Mais conteúdo relacionado

Mais procurados

Mais procurados (10)

Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
S5 p2
S5 p2S5 p2
S5 p2
 
Guis en java-1pp_2012_
Guis en java-1pp_2012_Guis en java-1pp_2012_
Guis en java-1pp_2012_
 
Java - Tutorial Ventanas
Java - Tutorial VentanasJava - Tutorial Ventanas
Java - Tutorial Ventanas
 
S4 p2
S4 p2S4 p2
S4 p2
 
Javascript
JavascriptJavascript
Javascript
 
Concepto de layout
Concepto de layoutConcepto de layout
Concepto de layout
 
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontendCombinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
 
Confección de interfaces de usuario con JAVA - SWING
Confección de interfaces de usuario con JAVA - SWINGConfección de interfaces de usuario con JAVA - SWING
Confección de interfaces de usuario con JAVA - SWING
 
Ha2 nm50 eq#3-powerbuilder
Ha2 nm50 eq#3-powerbuilderHa2 nm50 eq#3-powerbuilder
Ha2 nm50 eq#3-powerbuilder
 

Destaque

Informe de situacion fiscal de las provincias 2015 y perspectivas 2016
Informe de situacion fiscal de las provincias 2015 y perspectivas 2016Informe de situacion fiscal de las provincias 2015 y perspectivas 2016
Informe de situacion fiscal de las provincias 2015 y perspectivas 2016Eduardo Nelson German
 
Trabajo 1 -presentación revista. Neus Ramis
Trabajo 1 -presentación revista. Neus RamisTrabajo 1 -presentación revista. Neus Ramis
Trabajo 1 -presentación revista. Neus RamisNeus Ramis Sureda
 
Erklärung der Schülerinnen- und Schülerrechte
Erklärung der Schülerinnen- und SchülerrechteErklärung der Schülerinnen- und Schülerrechte
Erklärung der Schülerinnen- und SchülerrechteUSO-UCE-UCS
 
Hola amor
Hola amorHola amor
Hola amorj2n4t6h
 
Encuesta Navegantes en la Red
Encuesta Navegantes en la RedEncuesta Navegantes en la Red
Encuesta Navegantes en la RedArturo Criado
 
La ingenieria de sistemas
La ingenieria de sistemasLa ingenieria de sistemas
La ingenieria de sistemasjuliorovira96
 
Presentacion y precios programas au pair.
Presentacion y precios programas au pair.Presentacion y precios programas au pair.
Presentacion y precios programas au pair.Omar Guerrero D
 
OFFICE 365- CLOUD OR NOT, YOU SHOULD KNOW HOW IT WILL SHAPE YOUR ORGANISATIO...
OFFICE 365-  CLOUD OR NOT, YOU SHOULD KNOW HOW IT WILL SHAPE YOUR ORGANISATIO...OFFICE 365-  CLOUD OR NOT, YOU SHOULD KNOW HOW IT WILL SHAPE YOUR ORGANISATIO...
OFFICE 365- CLOUD OR NOT, YOU SHOULD KNOW HOW IT WILL SHAPE YOUR ORGANISATIO...Waterstons Ltd
 
Opec growth strategies
Opec growth strategiesOpec growth strategies
Opec growth strategiesSamarth Gupta
 
Diapositivas aspel sae
Diapositivas  aspel saeDiapositivas  aspel sae
Diapositivas aspel saeDouglas Gomez
 
Internship Report on ChangHong Ruba (Pvt) Limited
Internship Report on ChangHong Ruba (Pvt) Limited Internship Report on ChangHong Ruba (Pvt) Limited
Internship Report on ChangHong Ruba (Pvt) Limited Ihtsham javed
 

Destaque (20)

Informe de situacion fiscal de las provincias 2015 y perspectivas 2016
Informe de situacion fiscal de las provincias 2015 y perspectivas 2016Informe de situacion fiscal de las provincias 2015 y perspectivas 2016
Informe de situacion fiscal de las provincias 2015 y perspectivas 2016
 
El Madrid de los Austrias (última versión)
El Madrid de los Austrias (última versión)El Madrid de los Austrias (última versión)
El Madrid de los Austrias (última versión)
 
CV_YDS
CV_YDSCV_YDS
CV_YDS
 
Trabajo 1 -presentación revista. Neus Ramis
Trabajo 1 -presentación revista. Neus RamisTrabajo 1 -presentación revista. Neus Ramis
Trabajo 1 -presentación revista. Neus Ramis
 
Erklärung der Schülerinnen- und Schülerrechte
Erklärung der Schülerinnen- und SchülerrechteErklärung der Schülerinnen- und Schülerrechte
Erklärung der Schülerinnen- und Schülerrechte
 
Hola amor
Hola amorHola amor
Hola amor
 
Memoria 2012
Memoria 2012Memoria 2012
Memoria 2012
 
Encuesta Navegantes en la Red
Encuesta Navegantes en la RedEncuesta Navegantes en la Red
Encuesta Navegantes en la Red
 
La ingenieria de sistemas
La ingenieria de sistemasLa ingenieria de sistemas
La ingenieria de sistemas
 
Presentacion y precios programas au pair.
Presentacion y precios programas au pair.Presentacion y precios programas au pair.
Presentacion y precios programas au pair.
 
Autoevaluación del afiche
Autoevaluación del afiche Autoevaluación del afiche
Autoevaluación del afiche
 
OFFICE 365- CLOUD OR NOT, YOU SHOULD KNOW HOW IT WILL SHAPE YOUR ORGANISATIO...
OFFICE 365-  CLOUD OR NOT, YOU SHOULD KNOW HOW IT WILL SHAPE YOUR ORGANISATIO...OFFICE 365-  CLOUD OR NOT, YOU SHOULD KNOW HOW IT WILL SHAPE YOUR ORGANISATIO...
OFFICE 365- CLOUD OR NOT, YOU SHOULD KNOW HOW IT WILL SHAPE YOUR ORGANISATIO...
 
Clean code slide
Clean code slideClean code slide
Clean code slide
 
Revista Master en Banca. Número 8
Revista Master en Banca. Número 8Revista Master en Banca. Número 8
Revista Master en Banca. Número 8
 
Conceptos Politicos
Conceptos PoliticosConceptos Politicos
Conceptos Politicos
 
Libreta de construcciones
Libreta de construccionesLibreta de construcciones
Libreta de construcciones
 
Opec growth strategies
Opec growth strategiesOpec growth strategies
Opec growth strategies
 
PM Magazine 2009
PM Magazine 2009PM Magazine 2009
PM Magazine 2009
 
Diapositivas aspel sae
Diapositivas  aspel saeDiapositivas  aspel sae
Diapositivas aspel sae
 
Internship Report on ChangHong Ruba (Pvt) Limited
Internship Report on ChangHong Ruba (Pvt) Limited Internship Report on ChangHong Ruba (Pvt) Limited
Internship Report on ChangHong Ruba (Pvt) Limited
 

Semelhante a MobileCONGalicia Introducción a Android

Tema 4 3_1_interfaces_de_usuario
Tema 4 3_1_interfaces_de_usuarioTema 4 3_1_interfaces_de_usuario
Tema 4 3_1_interfaces_de_usuarioCarlos A. Iglesias
 
Presentacion android mistela&tweets
Presentacion android mistela&tweetsPresentacion android mistela&tweets
Presentacion android mistela&tweetsJorge Soro
 
2.1 android cep jaen 2014 estructura de aplicación
2.1 android cep jaen 2014   estructura de aplicación2.1 android cep jaen 2014   estructura de aplicación
2.1 android cep jaen 2014 estructura de aplicaciónJose Antonio Vacas
 
Taller Android seedrocket
Taller Android seedrocketTaller Android seedrocket
Taller Android seedrocketIsrael Camacho
 
Mi primera app con GAE y GWT
Mi primera app con GAE y GWTMi primera app con GAE y GWT
Mi primera app con GAE y GWTGDG Lima
 
Tema 4 3_3_interfaces_de_usuario
Tema 4 3_3_interfaces_de_usuarioTema 4 3_3_interfaces_de_usuario
Tema 4 3_3_interfaces_de_usuarioCarlos A. Iglesias
 
Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2Ignacio Muñoz Vicente
 
Desarrollo en Android: Conceptos Básicos
Desarrollo en Android: Conceptos BásicosDesarrollo en Android: Conceptos Básicos
Desarrollo en Android: Conceptos BásicosGabriel Huecas
 
Introducción a Android
Introducción a AndroidIntroducción a Android
Introducción a Androidmcanalesc94
 
Sesion 11 Teoria.pdf
Sesion 11 Teoria.pdfSesion 11 Teoria.pdf
Sesion 11 Teoria.pdfDianaSullcav
 
Taller Práctico de Android
Taller Práctico de AndroidTaller Práctico de Android
Taller Práctico de AndroidJavier Muñoz
 
Taller livetrackingandroid
Taller livetrackingandroidTaller livetrackingandroid
Taller livetrackingandroidsantiagohiguera
 
Mi primera App con GAE
Mi primera App con GAEMi primera App con GAE
Mi primera App con GAEGDG Lima
 

Semelhante a MobileCONGalicia Introducción a Android (20)

Tema 4 3_1_interfaces_de_usuario
Tema 4 3_1_interfaces_de_usuarioTema 4 3_1_interfaces_de_usuario
Tema 4 3_1_interfaces_de_usuario
 
Android
AndroidAndroid
Android
 
Tema 4.5 interfaces
Tema 4.5 interfacesTema 4.5 interfaces
Tema 4.5 interfaces
 
Presentacion android mistela&tweets
Presentacion android mistela&tweetsPresentacion android mistela&tweets
Presentacion android mistela&tweets
 
Android Superstar - Buenas Prácticas
Android Superstar - Buenas PrácticasAndroid Superstar - Buenas Prácticas
Android Superstar - Buenas Prácticas
 
Recursos en Android 101
Recursos en Android 101Recursos en Android 101
Recursos en Android 101
 
2.1 android cep jaen 2014 estructura de aplicación
2.1 android cep jaen 2014   estructura de aplicación2.1 android cep jaen 2014   estructura de aplicación
2.1 android cep jaen 2014 estructura de aplicación
 
Taller Android seedrocket
Taller Android seedrocketTaller Android seedrocket
Taller Android seedrocket
 
Mi primera app con GAE y GWT
Mi primera app con GAE y GWTMi primera app con GAE y GWT
Mi primera app con GAE y GWT
 
Introduccion android
Introduccion androidIntroduccion android
Introduccion android
 
Tema 4 3_3_interfaces_de_usuario
Tema 4 3_3_interfaces_de_usuarioTema 4 3_3_interfaces_de_usuario
Tema 4 3_3_interfaces_de_usuario
 
Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2
 
Android basics v3
Android basics v3Android basics v3
Android basics v3
 
Desarrollo en Android: Conceptos Básicos
Desarrollo en Android: Conceptos BásicosDesarrollo en Android: Conceptos Básicos
Desarrollo en Android: Conceptos Básicos
 
Introducción a Android
Introducción a AndroidIntroducción a Android
Introducción a Android
 
Tema 4.3 Ejemplo sobre teleco
Tema 4.3 Ejemplo sobre telecoTema 4.3 Ejemplo sobre teleco
Tema 4.3 Ejemplo sobre teleco
 
Sesion 11 Teoria.pdf
Sesion 11 Teoria.pdfSesion 11 Teoria.pdf
Sesion 11 Teoria.pdf
 
Taller Práctico de Android
Taller Práctico de AndroidTaller Práctico de Android
Taller Práctico de Android
 
Taller livetrackingandroid
Taller livetrackingandroidTaller livetrackingandroid
Taller livetrackingandroid
 
Mi primera App con GAE
Mi primera App con GAEMi primera App con GAE
Mi primera App con GAE
 

Mais de Alberto Ruibal

Xornada "Novos Perfís profesionais na Era Dixital"
Xornada "Novos Perfís profesionais na Era Dixital"Xornada "Novos Perfís profesionais na Era Dixital"
Xornada "Novos Perfís profesionais na Era Dixital"Alberto Ruibal
 
Mobialia Gas Stations Spain
Mobialia Gas Stations SpainMobialia Gas Stations Spain
Mobialia Gas Stations SpainAlberto Ruibal
 
Modelos de Negocio para Aplicaciones Móviles
Modelos de Negocio para Aplicaciones MóvilesModelos de Negocio para Aplicaciones Móviles
Modelos de Negocio para Aplicaciones MóvilesAlberto Ruibal
 
Appcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en AndroidAppcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en AndroidAlberto Ruibal
 
Mobialia Chess DevFest
Mobialia Chess DevFestMobialia Chess DevFest
Mobialia Chess DevFestAlberto Ruibal
 
Mobile 2.0 Open Ideas WorkShop: Building Social Media Enabled Apps on Android
Mobile 2.0 Open Ideas WorkShop: Building Social Media Enabled Apps on AndroidMobile 2.0 Open Ideas WorkShop: Building Social Media Enabled Apps on Android
Mobile 2.0 Open Ideas WorkShop: Building Social Media Enabled Apps on AndroidAlberto Ruibal
 

Mais de Alberto Ruibal (6)

Xornada "Novos Perfís profesionais na Era Dixital"
Xornada "Novos Perfís profesionais na Era Dixital"Xornada "Novos Perfís profesionais na Era Dixital"
Xornada "Novos Perfís profesionais na Era Dixital"
 
Mobialia Gas Stations Spain
Mobialia Gas Stations SpainMobialia Gas Stations Spain
Mobialia Gas Stations Spain
 
Modelos de Negocio para Aplicaciones Móviles
Modelos de Negocio para Aplicaciones MóvilesModelos de Negocio para Aplicaciones Móviles
Modelos de Negocio para Aplicaciones Móviles
 
Appcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en AndroidAppcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en Android
 
Mobialia Chess DevFest
Mobialia Chess DevFestMobialia Chess DevFest
Mobialia Chess DevFest
 
Mobile 2.0 Open Ideas WorkShop: Building Social Media Enabled Apps on Android
Mobile 2.0 Open Ideas WorkShop: Building Social Media Enabled Apps on AndroidMobile 2.0 Open Ideas WorkShop: Building Social Media Enabled Apps on Android
Mobile 2.0 Open Ideas WorkShop: Building Social Media Enabled Apps on Android
 

Último

NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdfNUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdfEDNAMONICARUIZNIETO
 
Apunte de clase Pisos y Revestimientos 1
Apunte de clase Pisos y Revestimientos 1Apunte de clase Pisos y Revestimientos 1
Apunte de clase Pisos y Revestimientos 1Gonella
 
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJODIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJOLeninCariMogrovejo
 
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxEJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxFabianValenciaJabo
 
libro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajelibro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajeKattyMoran3
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxNataliaGonzalez619348
 
5º SOY LECTOR PART1- MD EDUCATIVO.pdfde
5º SOY LECTOR PART1- MD  EDUCATIVO.pdfde5º SOY LECTOR PART1- MD  EDUCATIVO.pdfde
5º SOY LECTOR PART1- MD EDUCATIVO.pdfdeBelnRosales2
 
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2Eliseo Delgado
 
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfBITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfsolidalilaalvaradoro
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Angélica Soledad Vega Ramírez
 
historieta materia de ecologías producto
historieta materia de ecologías productohistorieta materia de ecologías producto
historieta materia de ecologías productommartinezmarquez30
 
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...MagalyDacostaPea
 
Programa sintetico fase 2 - Preescolar.pdf
Programa sintetico fase 2 - Preescolar.pdfPrograma sintetico fase 2 - Preescolar.pdf
Programa sintetico fase 2 - Preescolar.pdfHannyDenissePinedaOr
 
Apunte de clase Pisos y Revestimientos 2
Apunte de clase Pisos y Revestimientos 2Apunte de clase Pisos y Revestimientos 2
Apunte de clase Pisos y Revestimientos 2Gonella
 
Presentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxPresentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxRosabel UA
 
Buenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria FarmaceuticaBuenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria FarmaceuticaMarco Camacho
 

Último (20)

NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdfNUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdf
 
Apunte de clase Pisos y Revestimientos 1
Apunte de clase Pisos y Revestimientos 1Apunte de clase Pisos y Revestimientos 1
Apunte de clase Pisos y Revestimientos 1
 
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJODIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
 
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxEJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
 
libro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajelibro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguaje
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
 
¿Amor o egoísmo? Esa es la cuestión.pptx
¿Amor o egoísmo? Esa es la cuestión.pptx¿Amor o egoísmo? Esa es la cuestión.pptx
¿Amor o egoísmo? Esa es la cuestión.pptx
 
5º SOY LECTOR PART1- MD EDUCATIVO.pdfde
5º SOY LECTOR PART1- MD  EDUCATIVO.pdfde5º SOY LECTOR PART1- MD  EDUCATIVO.pdfde
5º SOY LECTOR PART1- MD EDUCATIVO.pdfde
 
Unidad 2 | Teorías de la Comunicación | MCDIU
Unidad 2 | Teorías de la Comunicación | MCDIUUnidad 2 | Teorías de la Comunicación | MCDIU
Unidad 2 | Teorías de la Comunicación | MCDIU
 
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
 
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfBITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...
 
Acuerdo segundo periodo - Grado Septimo.pptx
Acuerdo segundo periodo - Grado Septimo.pptxAcuerdo segundo periodo - Grado Septimo.pptx
Acuerdo segundo periodo - Grado Septimo.pptx
 
historieta materia de ecologías producto
historieta materia de ecologías productohistorieta materia de ecologías producto
historieta materia de ecologías producto
 
Acuerdo segundo periodo - Grado Sexto.pptx
Acuerdo segundo periodo - Grado Sexto.pptxAcuerdo segundo periodo - Grado Sexto.pptx
Acuerdo segundo periodo - Grado Sexto.pptx
 
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
 
Programa sintetico fase 2 - Preescolar.pdf
Programa sintetico fase 2 - Preescolar.pdfPrograma sintetico fase 2 - Preescolar.pdf
Programa sintetico fase 2 - Preescolar.pdf
 
Apunte de clase Pisos y Revestimientos 2
Apunte de clase Pisos y Revestimientos 2Apunte de clase Pisos y Revestimientos 2
Apunte de clase Pisos y Revestimientos 2
 
Presentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxPresentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptx
 
Buenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria FarmaceuticaBuenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria Farmaceutica
 

MobileCONGalicia Introducción a Android

  • 1. Introducción a Android Y mis 25 consejos para los que empiezan en Android MobileCONGalicia, Diciembre 2011 Alberto Alonso Ruibal alberto.ruibal@mobialia.com T: @mobialia @albertoruibal
  • 2. Quién soy Ingeniero de Telecomunicación System Manager J2EE Developer Desarrollador Android @ Mobialia Mobialia Chess / Internet Chess Club App Gasolineras España / Connect-4 / Trivial / Slot Racing MartinVars's RadioMe / Track my Followers Mi blog: http://www.alonsoruibal.com Mi empresa: http://www.mobialia.com
  • 3. Estado de las plataformas móviles (USA)
  • 4. Y por qué Android ● Código abierto ● 550.000 activaciones diarias ● Diversidad de dispositivos, fabricantes... ● Porque tiene detrás a Google
  • 5. Qué necesito para desarrollar ● Un ordenador con Windows, MacOSX o Linux ● Java SDK, y conocimientos de Java ● Android SDK http://developer.android.com/sdk/index.html ● Eclipse + plugin ADT (es posible utilizar otros IDEs). Recomiendo el “Eclipse IDE for Java Developers” http://www.eclipse.org/downloads/
  • 6. Estructura del proyecto src/ Código fuente gen/ Archivos generados a partir de los recursos assets/ Ficheros a los que va a acceder la aplicación res/ Carpeta de recursos drawable/ Imágenes layout/ Disposición de elementos en pantalla raw/ Archivos de datos (sonidos por ejemplo) values/ Definición de textos, colores, estilos, etc AnroidManifest.xml
  • 7. Componentes de una aplicación ● Actividades: Cada pantalla que se muestra es una “Actividad”, lo que muestra la actividad es un “Layout” ● Servicios: Para aplicaciones que necesitan estar ejecutándose en segundo plano ● Intents: Sistema de comunicación entre aplicaciones / actividades
  • 8. Las actividades y su ciclo de vida Cada Actividad es una clase Java con métodos estándar que son llamados en los distintos cambios de estado Hay que definir cada actividad en el AndroidManifest.xml
  • 9. Diseñando pantallas: layouts ● Se pueden crear desde código Java o bien definirlos en un XML (lo recomendado) ● Todos los componentes de las pantallas pueden ser: ● Viewgroups (cuando pueden tener “hijos”) ● Views ● El editor WYSIWYG incluido en el ADT ahora funciona y es usable
  • 10. Los selectores de recursos ● Se le añaden a las carpetas de recursos: ● Por densidad de píxeles: -ldpi -mdpi -hdpi -xhdpi ● Por tamaño de pantalla: -small -normal -large -xlarge ● Por idioma: -es -pt -fr -it ... ● Por orientación: -port -land ● Se pueden combinar varios: res/drawable-mdpi-es ● El sistema escoge el recurso adecuado en cada momento, y hace auto-escalado de las imágenes
  • 12. Densidades de pantalla HDPI MDPI LDPI http://developer.android.com/guide/practices/screens_support.html
  • 13. Empaquetado y distribución ● La aplicación se empaqueta en un APK que se firma con un certificado ● En el Android Market nuestra aplicación queda identificada con este paquete y este certificado ● Ojo con perder el certificado o olvidar la contraseña... no podríamos actualizar la aplicación
  • 14. Mis 25 consejos Lo que me habría gustado saber hace dos años...
  • 15. 1# Para qué versión de Android desarrollar ● Yo recomiendo que las aplicaciones para móviles sean compatibles con Android 1.6 ● Salvo APIs muy específicas (cámara, bluetooth..) suele llegar ● Y desarrollar usando el SDK de la versión 4, ICS (por ejemplo la última versión de AdMob requiere >= 3.2) ● Antes de publicar probar siempre en un emulador 1.6
  • 16. 2# Diseñar pensando en múltiples tamaños de pantalla Y dar siempre soporte a pantallas horizontales
  • 17. 3# Usar estilos en los layouts ● Sistema similar a CSS en web ● Permite reducir drásticamente el tamaño de los XMLs ● Se define el estilo en styles.xml   <style name="WhiteText">     <item name="android:layout_width">wrap_content</item>     <item name="android:layout_height">wrap_content</item>     <item name="android:textStyle">bold</item>     <item name="android:textColor">@color/white</item>   </style> ● Y se usa con “style=”: <TextView style="@style/WhiteText" android:text="@string/text1"/> http://www.alonsoruibal.com/using-styles-on-android-layouts/
  • 18. 4# Usar includes ● Permiten crear componentes que podemos reutilizar ● Ejemplo, en un layout ponemos: <include layout="@layout/component" android:layout_width="wrap_content" android:layout_height="wrap_content"/> ● Y definimos en component.xml el layout del componente incluído ● Herramientas útiles del editor WYSIWYG del ADT “Extract includes” y “Extract styles”
  • 19. 5# Definir colores y dimensiones ● Definimos los colores en colors.xml <resources> <color name="text">#000000</color> </resources> ● Y las dimensiones en dimens.xml <resources> <dimen name="text_size_small">14sp</dimen> </resources> ● Los usamos desde los layouts con @color/ y @dimen/ <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/text" android:textSize="@dimen/text_size_small" android:text="Text" />
  • 20. 6# No bloquear el thread principal Dentro de una misma actividad: onCreate() onResume() Handler.handleMessage() t = new Thread(this) handler.sendEmptyMessage(code); t.start(); Tarea pesada ● Realizar cualquier operación pesada en un thread separado ● Sólo podemos modificar el interfaz desde el thread principal
  • 21. Si bloqueamos el thread principal...
  • 22. 7# Usar las preferencias ● Forma fácil de almacenar propiedades sencillas ● Pantallas estándard de preferencias, se pueden definir en XML http://code.google.com/p/mobialia-wikiplaces/source/browse/trunk/res/layout/preferences.xml ● Para obtener preferencias: SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); boolean booleanValue = sharedPref.getBoolean("booleanValue", true); int intValue = sharedPref.getInt("intValue", true); ● Truco: usar serialización JSON y luego guardar en las preferencias
  • 23. 8# Almacenando más datos ● Android integra SQLite DB ● Aunque es sencilla soporta grandes cantidades de datos (en una aplicación mía hasta 500.000 datos por tabla) ● Si queréis algo parecido a Hibernate, tenéis el Android Data Framework creado por @javielinux http://code.google.com/p/androiddataframework/
  • 24. 9# Usar listviews y adapters ● Forma óptima de mostrar pantallas con muchos datos ● El ListView le pide al Adapter la View a mostrar en el momento que es necesaria (ahorra memoria) ● Reutilizar views en el Adapter: mejora velocidad de la lista public View getView(int position, View convertView, ViewGroup parent) { LinearLayout ll; if (convertView != null) { ll = (LinearLayout) convertView; // Reciclamos! else { ll = (LinearLayout) LayoutInflater.from(mContext) .inflate(R.layout.wikiplaces_adapter, parent, false); }
  • 25. 10# Internacionalización con strings.xml ● Nunca meter cadenas en el código, ponerlas en res/values con el selector de idioma (values-es, values-pt...) ● Aplicación web para la traducción: PASTT http://code.google.com/p/android-php-translator/ ● Poner en un único XML las cadenas y los arrays a traducir ● Crear un XML separado con las cadenas que no necesitan traducción ● Sitio web con servicio de traducción gratuito (thx @ilnuska) http://www.getlocalization.com/
  • 26. 11# Pasar datos en el Intent ● Forma de enviar datos de una actividad a otra (bien de nuestra aplicación o entre aplicaciones) ● En la actividad llamante: Intent intent = new Intent(this, DemoActivity.class); Bundle bundle = new Bundle(); bundle.putInt("intValue", 33); bundle.putBoolean("booleanValue", true); intent.putExtras(bundle); startActivity(intent); ● Y en la que recibe los datos (en el onCreate()): Bundle extras = getIntent().getExtras(); int intValue = extras.getInt("intValue"); boolean booleanValue = extras.getBoolean("booleanValue");
  • 27. 12# Intents útiles ACTION_VIEW ● Abrir el navegador web del sistema: String uri = "http://www.mobialia.com"; Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri)); startActivity(myIntent); ● Abrir Google Maps Navigation: String uri = "google.navigation:q=" + lat + "," + lon; Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri)); startActivity(myIntent);
  • 28. 13# Intents útiles ACTION_SEND ● Share Intent (ACTION_SEND) String shareText = "texto a compartir"; Intent intent = new Intent(android.content.Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(android.content.Intent.EXTRA_TEXT, shareText); startActivity(Intent.createChooser(intent, getString(R.string.share_choose))); ● Email Intent...
  • 29. 14# Interceptar URLs ● Podemos configurar actividades para que intercepten determinadas URLs ● Añadimos un intent filter en el AndroidManifest.xml: <activity android:name =".MobialiaActivity"> <intent-filter> <action android:name="android.intent.action.VIEW"></action> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="http" android:host="mobialia.com"/> </intent-filter> </activity>
  • 30. 15# Usar el parser JSON integrado ● Recomiendo usar JSON cuando haya que obtener datos de un servicio externo ● Android tiene JSONObject y JSONArray para parsear datos JSON ● Ejemplo de uso en WikiPlacesData.java: http://code.google.com/p/mobialia-wikiplaces/source/browse/trunk/src/com/mobialia/wikiplaces/WikiplacesData.java ● Y en general antes de implementar algo, buscar si hay una API o librería que lo hace
  • 31. 17# Vigilar la memoria que consume la aplicación ● Usar el Allocation Tracker del ADT para detectar dónde ocupamos memoria ● Cada vez que entra el Garbage Collector supone una pausa de la aplicación que puede llegar hasta 100 ó 200 ms ● Esto mata el framerate de cualquier juego http://developer.android.com/resources/articles/track-mem.html
  • 32. 16# Cuidado al rotar la pantalla ● Cada vez que se rota la pantalla de destruye la actividad y se vuelve a crear ● El sistema tiene una memoria limitada para bitmaps, si se agota aparece el error: Bitmap size exceeds VM budget ● Y suele aparecer en el rotado de pantalla ● Añadir al AndroidManifest.xml android:configChanges="orientation" y sobreescribir el método onConfigurationChanged() (thx @luiskap) http://www.alonsoruibal.com/bitmap-size-exceeds-vm-budget/
  • 33. 18# Reproducir audio ● Establecer el stream que controlamos con las teclas de volumen setVolumeControlStream(AudioManager.STREAM_MUSIC); ● SoundPool: creamos un “pool” de sonidos private SoundPool soundPool; private HashMap<Integer, Integer> soundPoolMap; private void initSounds() { soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100); soundPoolMap = new HashMap<Integer, Integer>(); soundPoolMap.put(66, soundPool.load(this, R.raw.click, 1)); } ● Y los vamos reproduciendo bajo demanda soundPool.play(soundPoolMap.get(66), volume, volume, 1, 0, 1f); ● Para cosas más avanzadas: AudioTrack
  • 34. 19# Crear aplicaciones 3D ● Se utiliza la API de OpenGL ES ● Librerías que facilitan su uso: ● JPCT-AE (Código cerrado) http://www.jpct.net/jpct-ae/ ● Min3D (Muy simple y de código abierto), mi favorita http://code.google.com/p/min3d/ ● Con ambas podemos cargar modelos .3ds, .obj ● Frameworks más complejos y multiplataforma: Unity
  • 35. Un ejemplo de Min3D: Slot Racing
  • 36. 20# Integrar anuncios de AdMob ● Forma fácil de obtener ingresos desde el primer momento ● Pagan un mes a posteriori a través de Paypal (a primeros de Diciembre se cobra la publicidad de Octubre) ● CPMs entre 0,20 - 0,40 USD ● No funciona con apps locales ● Cómo integrarlo: http://code.google.com/intl/es/mobile/ads/docs/android/ ● Tiene House Ads para promoción cruzada
  • 37. 21# Usar Google Analytics ● Las estadísticas de uso son imprescindibles ● Con AdMob ya tenemos estadísticas de uso de la aplicación ● Obtener el Analytics SDK de: http://code.google.com/intl/es/mobile/analytics/download.html ● Se registra la aplicación Android como un dominio más ● Ejemplo de uso: tracker = GoogleAnalyticsTracker.getInstance(); tracker.start("UA-2360573-11", this); tracker.trackPageView("/main"); tracker.dispatch(); tracker.stop();
  • 38. 22# Publicar en el Android Market ● Sólo por 25 USD (un sólo pago) ● Cuidado con el certificado ● Aplicar IVA a las ventas en Europa, para más temas fiscales: http://www.alonsoruibal.com/vender-en-android-market-desde-espana/ ● Los markets alternativos... ¡no funcionan!
  • 39. 23# Implementar compras dentro de la aplicación ● Las aplicaciones que obtienen más ingresos usan compras dentro de la aplicación http://developer.android.com/guide/market/billing/billing_overview.html ● Es complicado de implementar pero hay una librería desarrollada por Robot Media (@hpique) que lo simplifica: https://github.com/robotmedia/AndroidBillingLibrary
  • 40. 24# Usar el servicio de licencias del Android Market ● Permite proteger nuestra aplicación contra la piratería ● Sólo funciona en dispositivos con Android Market ● Al integrarlo sólo podemos vender la app en en Android Market, para markets alternativos hay que adaptarla ● A veces falla... http://developer.android.com/guide/publishing/licensing.html
  • 41. 25# Dar soporte a los usuarios ● Ocupa el 25% de mi tiempo de trabajo ● Parte esencial del ciclo de vida de la aplicación: ● Detección de errores ● Consejos para mejoras ● Mejora visibilidad, ratings de los usuarios, etc ● En general la actualización frecuente de la aplicación mejora el posicionamiento en el Market
  • 42. Dónde aprender más (I) ● http://developer.android.com/index.html ● http://android-developers.blogspot.com/ ● http://www.guidetotheappgalaxy.com/ ● http://stackoverflow.com ● http://androcode.com (@JMPergar @breogangf @kix2902)
  • 43. Dónde aprender más (II) Desarrollé la aplicación WikiPlaces como ejemplo para LabAndroid Málaga. Esta aplicación contiene varios ejemplos de cómo hacer muchas cosas comunes en Android ● Pantalla inicial con un Dashboard ● Crear pantallas de preferencias y obtener preferencias ● Usar la API de Google Maps API (incluyendo overlays) y la Location API para obtener la ubicación ● Usar servicios JSON externos ● Listas y adapters ● Lanzar aplicaciones externas con Intents ● Integración con AdMob para mostrar anuncios http://www.mobialia.com/labandroid
  • 44. Dudas, preguntas... Gracias por vuestra atención! Alberto Alonso Ruibal alberto.ruibal@mobialia.com http://www.mobialia.com T: @mobialia @albertoruibal