Andrs Gonzlez
Programa
Android
Generalidades y Entorno de Desarrollo
Ciclos de Vida
Aplicaciones
Activity y Service
Intent, IntentFilter y BroadcastReceiver
SharedPreferences y Recursos
Bases de Datos
Geolocacin
Notificaciones
Android - Historia
Android Inc. fundada en Octubre 2003
Dispositivos ms concientes de sus usuarios
Android - Historia
Android - Historia
Versiones
Android - Evolucin
Android 1
Cupcake
Donut
Android - Evolucin
Eclair
FroYo
Gingerbread
Android - Evolucin
Honeycomb
Icream Sandwich
Android - Arquitectura
Android - IDE
Eclipse
Maquina Virtual
Logcat
Control del Emulador
Android - IDE
Eclipse
Instalador: Descargar
Android - IDE
Eclipse
Acelerar el proceso de escritura de cdigo
Permite autocompletar
Seala errores de sintaxis
Permite agregar archivos (imgenes o de codigo fuente) con
pegarlos en el proyecto
Android - Logcat
Logcat
Despliega mensajes de depuracin de las
aplicaciones en ejecucin
Permite ubicar el tipo de error, junto con el
archivo asociado y la lnea que general el
problema
Posee filtros para solo mostrar los mensajes
que nos interesan dependiendo del nivel de
verbosidad
Android - Logcat
Logcat
Llamadas entrantes
Cambios de ubicaci
Llegada de SMS
Rotacin de pantalla
Android - Aplicaciones
Directorios Importantes
src
[package]
Archivos Java (Actividades y Servicios)
res
drawable - [l, m, h]dpi
Archivos imgenes (Fondos, Botones, Etc)
layout
Archivos Xml de Layouts (Layouts y Menus)
values
Archivos Xml de valores usados en la app
strings.xml
Android - Aplicaciones
Cdigo fuente y layouts
package cl.ipciisa.test;
import android.app.Activity;
import android.os.Bundle;
public class MyActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
setContentView( R.layout.main );
}
}
Actividades
Servicios
Listeners
Libreras propias
Clases propias que use la app en general
Android - Layouts
Layouts en general
Despliegan y ordenan contenido
Pueden contener otros layouts
Permiten establecer un color de fondo, una
imgen de fondo, alto y ancho del layout
Requieren de un ScrollView para mostrar
ms contenido del que es visible en la
pantalla
Android - Layouts
LinearLayout
Tiene 2 orientaciones
Vertical
Ubica los hijos uno a uno abajo del anterior
Horizontal
Ubica los hijos uno al lado del anterior
Android - Layouts
LinearLayout
...
public class MyActivity extends Activity {
@Override
public void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
setContentView( R.layout.main );
LinearLayout ll;
ll = (LinearLayout) findViewById( R.id.main );
TextView t = new TextView( this );
t.setText( "HelloWorld" );
ll.addView( t );
}
}
Android - Layouts
RelativeLayout
Ordena los items contenidos en relacin a
los bordes del layout o a otros elementos
existentes
El cambio de id o la remocin de un
elemento puede generar cambios en el
orden del contenido mostrado
Se adapta a las diferentes orientaciones de
pantalla, pero algunos elementos pueden
quedar fuera de ella
Android - Layouts
RelativeLayout
RelativeLayout rl;
rl = (RelativeLayout) findViewById( R.id.main );
TextView t = new TextView( this );
RelativeLayout.LayoutParams p;
p = new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT );
p.addRulet( RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE );
t.setText( "HelloWorld" );
rl.addView( t, p );
Android - Layouts
GridLayout
Distribuye el espacio en partes N casilleros
Dichos casilleros se ordenan en filas y
columnas
Complejo de utilizar de manera
programtica
Puede ser reemplazado por otros tipos de
layout
Android - Layouts
TableLayout
Ordenan el contenido en filas y columnas
Similar a usar una combinacion de
LinearLayout o GridLayout
Complejo de usar de manera programtica
Android - Layouts
FrameLayout
Todos los elementos agregados son
ubicados en la esquina superior izquierda de
la pantalla
Puede indicarse un margen para cada
objeto, a fin de acomodarlo donde sea
necesario
Los objetos son puestos uno sobre del otro,
vistos como objetos planos o como capas en
una imgen
Android - Layouts
ScrollView
Contiene un LinearLayout
Permite que el contenido ubicado fuera de la
pantalla pueda ser visto
Debe ser declarado como horizontal o
vertical
No se utiliza directamente, sino que los hijos
se agregan al layout lineal nombrado al
principio
Android - AndroidManifest
AndroidManifest.xml
Contiene informacin primordial de la app
requerida para que la misma funcione
apropiadamente
Declara permisos, versiones, nodos, filtros y
listeners
Establece temas de colores y estilos de
nuestra app
Android - AndroidManifest
AndroidManifest.xml
Manifest
Package Name
Extras
Application
Label
Icon
Application Nodes
Permissions
Dependiente de la APP
Android - AndroidManifest
Android - Intents
Intents
Describen acciones o situaciones a las cuales
Android - Intents
Intents
Iniciar actividades o servicios con
parmetros
Uso en Origen
Intent intent = new Intent( "identificador.de.accion" );//Opcion 1
Intent intent = new Intent( Context context, Class Clase.class );//Opcion 2
intent.putExtra( "foo", foo ); //foo es cualquier variable o clase parcelable
startActivity( intent );//Para actividades
startService( intent );//Para servicios
sendBroadcast( intent );//Para filtros interesados en la accin
Uso en Destino
Bundle bundle = getIntent().getExtras();//En un Activity
//Para el caso del servicio usamos el intent que llega en onStartCommand
Foo foo = bundle.getFoo( "foo" );
//Operaciones sobre foo
Android - IntentFilter
IntentFilter y BroadcastReceiver
Indicar que Actividad o Servicio debe ejecutarse
Android - IntentFilter
IntentFilter y BroadcastReceiver
Indicar que Actividad o Servicio debe ejecutarse
Android - SharedPreferences
SharedPreferences
Permiten almacenar informacin de
manera no voltil
Elementos que se pueden guardar:
boolean
int
long
float
string
Android - SharedPreferences
SharedPreferences
SharedPreferences sharedPreferences = getSharedPreferences( "archivo", MODE_PRIVATE );
//Los modos son MODE_PRIVATE, MODE_WORLD_READABLE,
//MODE_WORLD_WRITABLE y MODE_MULTI_PROCESS.
SharedPreferences.Editor editor = sharedPreferences.edit();//Agregar/Modificar una variable
editor.putBoolean( "foo", true );
editor.commit();
boolean sharedPreferences = sharedPreferences.getBoolean( "foo", false );
//El segundo parametro, false para este caso, es el valor por defecto en caso de no hallarse la
//variable
Sobreescribir
onCreate(android.database.sqlite.SQLiteDatabase)
Android - Geolocacin
API Key
Obtener API Key
Modificar XML del mapview
<com.google.android.maps.MapView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="ApiKey"
/>
Modificar AndroidManifest.xml
<application android:name="App" >
<uses-library android:name="com.google.android.maps" />
Android - Geolocacin
API Key
Obtener API Key
Modificar XML del mapview
<com.google.android.maps.MapView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="ApiKey"
/>
Modificar AndroidManifest.xml
<application android:name="App" >
<uses-library android:name="com.google.android.maps" />
Android - Geolocacin
MapActivity
public class MyMapView extends MapActivity {
@Override
protected boolean isRouteDisplayed() {
return false;
}
LinearLayout linearLayout;
MapView mapView;
protected boolean onCreate( Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
mapView = (MapView) findViewById( R.id.mapview );
mapView.setBuiltInZoomControls( true );
mapOverlays = mapView.getOverlays();
drawable = this.getResources().getDrawable( R.drawable.androidmarker );
itemizedoverlay = new MyItemizedOverlay( drawable );
GeoPoint point = new GeoPoint(19240000,-99120000);
OverlayItem overlayitem = new OverlayItem(point, "", "");
itemizedoverlay.addOverlay( overlayitem );
mapOverlays.add( itemizedoverlay );
return false;
}
}
Android - Geolocacin
MapActivity
public class MyMapView extends MapActivity {
@Override
protected boolean isRouteDisplayed() {
return false;
}
LinearLayout linearLayout;
MapView mapView;
protected boolean onCreate( Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
mapView = (MapView) findViewById( R.id.mapview );
mapView.setBuiltInZoomControls( true );
mapOverlays = mapView.getOverlays();
drawable = this.getResources().getDrawable( R.drawable.androidmarker );
itemizedoverlay = new MyItemizedOverlay( drawable );
GeoPoint point = new GeoPoint(19240000,-99120000);
OverlayItem overlayitem = new OverlayItem(point, "", "");
itemizedoverlay.addOverlay( overlayitem );
mapOverlays.add( itemizedoverlay );
return false;
}
}
Android - Geolocacin
MyItemizedOverlay
public class MyItemizedOverlay extends ImetizedOverlay {
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
HelloItemizedOverlay() {
super( boundCenterBottom( defaultMarker ) );
}
public void addOverlay( OverlayItem overlay ) {
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem( int i ) {
return mOverlays.get( i );
}
@Override
public int size() {
return mOverlays.size();
}
}
Android - Geolocacin
MyLocationListener
public class MyLocationListener implements LocationListener {
public void onProviderDisabled() {
}
@Override
public void onLocationChanged( Location location ) {
}
@Override
public void onProviderDisabled( String provider ) {
}
@Override
public void onProviderEnabled( String provider ) {
}
@Override
public void onStatusChanged( String provider, int status, Bundle extras) {
}
}
Android - Notificaciones