Anda di halaman 1dari 51

Apps Mviles

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

Adquirida por Google en Agosto 2005


Presentacin de la OHA en Noviembre 2007
Expansin de la OHA en Diciembre 2008

Android - Historia

Android - Historia
Versiones

Beta - Noviembre 2005


1 - Septiembre 2008
1.1 - Febrero 2009
1.5 (Cupcake) - Abril 2009
1.6 (Donut) - Septiembre 2009
2.0 / 2.1 (Eclair) - Octubre 2009 / Enero 2010
2.2.X (Froyo) - Mayo 2010
2.3.X (Gingerbread) - Diciembre 2010
3.X (Honeycomb) - Febrero 2011
4.X (Icecream Sandwich) - Mayo 2011

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

Al usar el men "Window -> Show View" podemos acceder a la


ventana de Logcat y del Control del emulador

Despliega ventanas con las propiedades de los objetos


seleccionados al trabajar en layouts

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

Android - Control de Emulador


Control del Emulador
Simula diferentes cambios en el estado del
dispositivo como:

Llamadas entrantes
Cambios de ubicaci
Llegada de SMS
Rotacin de pantalla

Android - Control de Emulador


Control del Emulador

Android - Ciclos de Vida

Android - Ciclos de Vida


Ciclo de Vida
onCreate(): declaramos variables, iniciamos
procesos que pueden demorarse
onResume(): establecemos valores iniciales
de la aplicacin y revisamos si debemos
cargar o no datos
onPause(): guardamos automticamente las
acciones del usuario
onDestroy(): liberamos variables o listeners
y cerramos cualquier DB abierta

Android - Ciclos de Vida

Android - Ciclos de Vida


Ciclo de Vida
onCreate(): declaramos variables, iniciamos
procesos que pueden demorarse
onStartCommand(): en base al intent
recibido, podemos establecer que procesos
realizar en el servicio
stopSelf(): ya que no existe un evento
onStop(), podemos hacer que el servicio se
detenga a si mismo y ah realizar la limpieza
necesaria

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 );
}
}

Android - Cdigo Fuente


Cdigo fuente
Ubicado en Proyecto/src/Package/
Un archivo java por cada clase
Contiene los archivos de

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

Por defecto usan todo el ancho pero no todo


el alto de la pantalla
Pueden indicar una justificacin o
"gravedad" bajo la cual se ordenarn los
elementos contenidos

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

responde nuestra aplicacin


Permiten iniciar componentes (Acitividades y
Servicios)
Sirven para enviar parmetros y variables
Su constructor puede utilizar un contexto o una linea
descriptiva de la accin

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

dadas ciertas condiciones externas/internas de la


app
Usoprivate BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive( Context context, Intent intent ) {
//Acciones a realizar en caso de recibir un Broadcast
}
};
...
IntentFilter intentFilter = new IntentFilter( "identificador.de.accion" );//Opcion 1
intentFilter = addAction( "identificador.de.accion" );//Opcion 2, filtro existente
registerReceiver( broadcastReceiver, intentFilter );
...

Android - IntentFilter
IntentFilter y BroadcastReceiver
Indicar que Actividad o Servicio debe ejecutarse

dadas ciertas condiciones externas/internas de la


app
Usoprivate BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive( Context context, Intent intent ) {
//Acciones a realizar en caso de recibir un Broadcast
}
};
...
IntentFilter intentFilter = new IntentFilter( "identificador.de.accion" );//Opcion 1
intentFilter = addAction( "identificador.de.accion" );//Opcion 2, filtro existente
registerReceiver( broadcastReceiver, intentFilter );
...

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

Android - Bases de Datos


Bases de datos
Corren en SQLite
No permiten triggers o constraints
Ocupan una clase "proxy"
No se encargan de la proteccin de datos
No asegura consistencia

Android - Bases de Datos


Crear clase extendiendo DBHelper
Constructor debe incluir
super(context, DATABASE_NAME, null, DATABASE_VERSION);

Sobreescribir
onCreate(android.database.sqlite.SQLiteDatabase)

Hacer consultas con


rawQuery(java.lang.String, java.lang.String[])

Procesar retornos con


cursor.moveToFirst() y cursor.moveToNext()

Android - Bases de Datos


DBHelper
public class DictionaryOpenHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DICTIONARY_TABLE_NAME = "diccionario";
private static final String KEY_WORD = "palabra";
private static final String KEY_DEFINITION = "definicion";
private static final String DICTIONARY_TABLE_CREATE = "CREATE TABLE " + DICTIONARY_TABLE_NAME + " (" + KEY_WORD + "
TEXT, " +
KEY_DEFINITION + " TEXT);";
DictionaryOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DICTIONARY_TABLE_CREATE);
}
}

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

Anda mungkin juga menyukai