Desarrollo en Android PDF

23
Desarrollo en Android (v1.0) Roberto Calvo Palomino ([email protected]) GSyC/LibreSoft June 17, 2009 1

Transcript of Desarrollo en Android PDF

Page 1: Desarrollo en Android PDF

Desarrollo en Android

(v1.0)

Roberto Calvo Palomino ([email protected])GSyC/LibreSoft

June 17, 2009

1

Page 2: Desarrollo en Android PDF

Una copia de este documento y sus fuentes parapoder compilarlo se puede encontrar en la siguiente url:

http://libresoft.es/Members/rocapal/docs/androiddevel

(c) 2009 Roberto Calvo Palomino

Esta obra esta bajo una licencia Reconocimiento-Compartirbajo la misma licencia 3.0 Espana de Creative Commons.

Para ver una copia de esta licencia, visitehttp://creativecommons.org/licenses/by-sa/3.0/es/ o envie

una carta a Creative Commons, 171 Second Street, Suite 300,San Francisco, California 94105, USA.

Page 3: Desarrollo en Android PDF

Contents

1 Introduccion 4

2 Que es y que no es este documento 4

3 Fundamentos de una aplicacion Android 4

4 Ciclo de vida de una aplicacion Android 5

5 Desarrollo en Android 65.1 Desarrollo de una ’Activity’ . . . . . . . . . . . . . . . . . . . . . . . . . . 65.2 Desarrollo de una ’ActivityMap’ . . . . . . . . . . . . . . . . . . . . . . . 125.3 Desarrollo de una ’ActivityList’ . . . . . . . . . . . . . . . . . . . . . . . . 15

6 Menus y menus contextuales 206.1 Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206.2 Menus Contextuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

7 Resumen 23

3

Page 4: Desarrollo en Android PDF

1 Introduccion

Android es el sistema operativo de Google especialmente diseno para ejecutar endispositivos moviles. Todo nacio alla por el 2007 cuando se establecio la OHA (OpenHandset Alliance) 1 que se conforma por mas de 40 empresas relacionadas con lafabricacion (hardware y software) y distribucion de dispositivos moviles.

Desde su lanzamiento, numerosos programadores han encontrado en este sistemaoperativo la primera plataforma de programacion sencilla, potente y fiable paraprogramar en sistemas moviles. En este documento vamos a realizar una introducciona la programacion en la plataforma Android cuyo fin sera que podamos construir unaaplicacion sencilla basada en activity, activityMap, activityList y services.

Lecturas recomendadas sobre esta seccion:

� What is Android?http://developer.android.com/guide/basics/what-is-android.html

2 Que es y que no es este documento

Este documento SI:

� es una introduccion a la programacion en Android.

� te describira los distintos procesos existentes en Android.

� te ayudara a realizar tu primera aplicacion Android.

� te ensenara a utilizar mapas, gps y servicios en tu aplicacion Android.

Este documento NO:

� te ensenara a instalar el entorno (sdk, eclipse ...)

� es un documento explicativo sobre la filosofıa de Android.

� es un documento avanzado sobre programacion en JAVA/Android.

3 Fundamentos de una aplicacion Android

La plataforma de Android proporciona diferentes componentes a la hora de programaren funcion del objetivo de tu aplicacion. Android provee cuatro tipos diferentes decomponentes:

1http://en.wikipedia.org/wiki/Open Handset Alliance

4

Page 5: Desarrollo en Android PDF

� Activity: Una actividad es el componente mas usado en las aplicaciones Android.Tıpicamente una actividad representa una pantalla individual en el terminal ypresenta una interfaz grafica al usuario. Por ejemplo, en una aplicacion delistado de telefonos utilizarıamos dos actividades. Una para mostrar el listadode nombres y telefonos y la segunda, para mostrar la informacion detallada delcontacto seleccionado. La navegacion entre las pantallas se realiza iniciando nuevasactividades. Cuando una actividad es abierta, la actividad previa es puesta enpausa y agregada el “history stack” y no volvera al estado de ejecucion hasta quevuelva a ser invocada.

� Services: Un servicio no tiene interfaz grafica, pero puede ejecutarse en“background” por un tiempo indefinido (se asemeja mucho al demonio de lossistemas Linux). Por ejemplo, podemos utilizar un servicio para que vayacapturando cada cierto tiempo la posicion GPS y nos avise cuando estemos cercade algun amigo. Mientras tanto el usuario puede seguir realizando otras tareas.

� Broadcast receivers: Este tipo de componentes se utilizan para recibir y reaccionarante ciertas notificaciones broadcast. Este tipo de componentes no tienen interfazgrafica y pueden reaccionar ante eventos como cambio de zona horarias, llamadas,nivel de baterıa ... Todos los receivers heredan de la clase base BroadcastReceiver.

� Intent: Este tipo de componentes es una clase especial que usa Android paramoverse de una pantalla a otra. Un Intent describe lo que una aplicacion deseahacer. Cualquiera activity puede reutilizar funcionalidades de otros componentescon solo hacer una solicitud en la forma de Intent.

Lecturas recomendadas:

� Application Fundamentalshttp://developer.android.com/guide/topics/fundamentals.html

4 Ciclo de vida de una aplicacion Android

En la mayorıa de los casos, una aplicacion Android ejecuta dentro de su propio procesoLinux. El proceso es creado para ejecutar el codigo de la aplicacion y es el sistema quienpedira y reclamara su memoria para reasignarla a otra aplicacion.

Una caracterıstica peculiar en Android es que el tiempo de vida de un proceso noes controlado directamente por la aplicacion. Es el sistema quien decide y determina eltiempo de vida basandose en el uso y capacidades del sistema.

Para determinar que procesos deberıan ser eliminados ante una condicion baja dememoria, Android prioriza los procesos bajo una jerarquıa para asignar a cada procesouna importancia en el sistema.

Existen diferentes procesos de acuerdo a esta jerarquıa:

5

Page 6: Desarrollo en Android PDF

� Foreground Process: Es un proceso de primer plano que aloja una activity en lapantalla y con la que el usuario esta interactuando (su metodo onResume() ha sidollamado) o que un IntentReceiver esta ejecutandose. Este tipo de procesos seraneliminados como ultimo recurso si el sistema necesitase memoria.

� Visible Process: Es un proceso que aloja una activity pero no esta en primeraplano (su metodo onPause() ha sido llamado). Esto ocurre en situaciones donde laaplicacion muestra una cuadro de dialogo para interactuar con el usuario. Este tipode procesos no sera eliminado a caso que sea necesaria la memoria para mantenera todos los procesos del primer plano corriendo.

� Service Process: Es un proceso que aloja un service que ha sido iniciado conel metodo startService(). Este tipo de procesos no son visibles y suelen serimportantes para el usuario (conexion con servidores, reproduccion de musica).

� Background Process: Es un proceso que aloja una activity que no es actualmentevisible para el usuario (su metodo onStop() ha sido llamado). Normalmente laeliminacion de estos procesos no suponen un gran impacto para la actividad delusuario. Es muy usual que existan numerosos procesos de este tipo en el sistema,por lo que el sistema mantiene una lista para asegurar que el ultimo proceso vistopor el usuario sea el ultimo en eliminarse en caso de necesitar memoria.

� Empty Process: Es un proceso que no aloja ningun componente. La razon de existirde este proceso es tener una cache disponible de la aplicacion para su proximaactivacion. Es comun, que el sistema elimine este tipo de procesos con frecuenciapara obtener memoria disponible.

5 Desarrollo en Android

Una vez que hemos explicado los diferentes procesos y sus ciclos de vida dentro delsistema operativo Android, vamos a pasar a detallar la implementacion de alguno deestos procesos.

5.1 Desarrollo de una ’Activity’

El primer ejemplo practico que vamos a ver es la creacion de una actividad sencilla,simple, que unicamente tenga un par de componentes y una finalidad clara. Vamos acrear una actividad que contenga un boton y una etiqueta (textview) para mostrar laposicion GPS actual.

En un proyecto nuevo o existente es necesario crear la actividad LocationActivity.Ademas no hay que olvidarse de dar los permisos oportunos en el archivo Manifest.xmlpara ejecutar la actividad y para tener acceso al GPS.

<!-- Activity permission --><activity android:name="LocationActivity"></activity>

6

Page 7: Desarrollo en Android PDF

<!-- GPS permission --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

Ahora lo que crearemos es el layout (escrito en xml) que representa la interfaz graficaque tendra nuestra actividad. Sera una interfaz sencilla donde tendremos un boton y untextview para mostrar nuestra localizacion.

<?xml version="1.0" encoding="utf-8"?><AbsoluteLayoutandroid:id="@+id/widget0"android:layout_width="fill_parent"android:layout_height="fill_parent"xmlns:android="http://schemas.android.com/apk/res/android"><Buttonandroid:id="@+id/btUpdate"android:layout_width="137px"android:layout_height="43px"android:text="Update GPS"android:layout_x="90px"android:layout_y="44px"></Button><TextViewandroid:id="@+id/tvGPS"android:layout_width="202px"android:layout_height="44px"android:textSize="16sp"android:layout_x="52px"android:layout_y="119px"></TextView></AbsoluteLayout>

Ahora que ya tenemos el layout (que llamaremos main.xml) de la interfaz y lospermisos correspondientes, vamos a pasar a la descripcion del codigo de la clase.

7

Page 8: Desarrollo en Android PDF

public class LocationActivity extends Activity implements Runnable, OnClickListener {

Nuestra clase LocationActivity hereda de la clase Activity, y ademas implementalas interfaces OnClickListener (para poder capturar los eventos onClick del boton) yRunnable (ya que vamos a ejecutar en un thread aparte la obtencion de la posicionGPS).

private ProgressDialog pd;private Button btUpdate;private TextView txtLocation;private Location currentLocation;

private LocationManager mLocationManager;private Location mLocation;private MyLocationListener mLocationListener;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.main);

btUpdate = (Button)this.findViewById(R.id.btUpdate);btUpdate.setOnClickListener(this);

txtLocation = (TextView) this.findViewById(R.id.tvGPS);

}

public void onClick(View arg0) {

updateSignalGPS();

}

El metodo onCreate se encarga de iniciar la actividad por primera vez, por ellorealizamos la conexion de los widgets graficos con la definicion del archivo xml.Unicamente tenemos dos, un Button y un TextView. Es importante comentar queal boton le establecemos un listener para el evento onClick, que ejecutara el metodoupdateSignalGPS que se detallara en las siguientes lıneas.

8

Page 9: Desarrollo en Android PDF

private void writeSignalGPS() {

DialogInterface.OnCancelListener dialogCancel =new DialogInterface.OnCancelListener() {

public void onCancel(DialogInterface dialog) {

}

};

pd = ProgressDialog.show(this,"Searching...","Searching GPS Signal",true,true,dialogCancel);

Thread thread = new Thread(this);thread.start();

}

Como vemos, el metodo writeSignalGPS instancia un ’processDialog’ para que semuestre en pantalla mientras se encuentra la posicion GPS, y ademas ejecuta el threadcuyo codigo mostramos a continuacion:

public void run() {

mLocationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);

if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){

Looper.prepare();

mLocationListener = new MyLocationListener();

mLocationManager.requestLocationUpdates(LocationType, 0, 0, mLocationListener);

Looper.loop();

9

Page 10: Desarrollo en Android PDF

Looper.myLooper().quit();

} else {

Toast.makeText(getBaseContext(),"Signal GPS not found",Toast.LENGTH_LONG).show();

}}

En el codigo anterior del thread podemos ver como se configura el provider de GPScomo fuente de localizacion.

private class MyLocationListener implements LocationListener{

public void onLocationChanged(Location loc) {if (loc != null) {

handler.sendEmptyMessage(0);}

}

public void onProviderDisabled(String provider) {// TODO Auto-generated method stub

}

public void onProviderEnabled(String provider) {// TODO Auto-generated method stub

}

public void onStatusChanged(String provider, int status,Bundle extras) {

// TODO Auto-generated method stub}

}

Es necesario implementar un LocationListener para ejecutar nuestro codigo cuandoel sistema encuentra la posicion GPS. Cuando el metodo onLocationChanged se llame,nos indicara que la posicion GPS ha cambiado y por tanto podemos escribir dicha

10

Page 11: Desarrollo en Android PDF

informacion en nuestra actividad. Como nos encontramos ejecutando un thread, nopodemos acceder a la interfaz grafica para modificar el textview (es una caracterısticatıpica de los sistemas graficos). Por ello vamos a utilizar el mecanismo de paso demensajes que Android implementa como Handlers.

private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {

pd.dismiss();

mLocationManager.removeUpdates(mLocationListener);

if (currentLocation!=null) {

txtLocation.setText("Current Position: " +currentLocation.toString() );

}}

};

Por ultimo, podemos ver como el manejador que hemos implementado es llamadocuando se encuentra la posicion GPS y por tanto desde aquı si podemos actualizar lainterfaz grafica, por lo que mostramos la informacion en el textview txtLocation

Figure 1: Pantalla de la Activity

11

Page 12: Desarrollo en Android PDF

5.2 Desarrollo de una ’ActivityMap’

Una vez que sabemos desarrollar sin problemas una activity, vamos a ver como incluirun mapa (google maps) en dicha actividad.

Lo primero que tenemos que hacer es heredar de la actividad MapActivity

public class LocationActivity extends MapActivity implements Runnable, OnClickListener {

Anadiremos en el layout el widget del mapa:

<view class="com.google.android.maps.MapView"android:id="@+id/myMapView"android:layout_width="320px"android:layout_height="220px"android:layout_x="0px"android:layout_y="180px"android:apiKey=""/>

Como vemos, necesitamos un apiKey para poder utilizar los mapas de google desdeAndroid. Para generar la clave seguir los siguientes pasos:

$ keytool -list -keystore ~/.android/debug.keystore...Certificate fingerprint (MD5):94:1E:43:49:87:73:BB:E6:A6:88:D7:20:F1:8E:B5:98

Despues deberas ir a la siguiente urlhttp://code.google.com/intl/es-ES/android/maps-api-signup.htmly obtener tu clave a partir del MD5 que se ha generado anteriormente. Cuando obtengastu clave guardala en un sitio seguro y anadela al layout, concretamente en la etiquetaandroid:apiKey.

Por ultimo solo nos queda anadir en el archivo Manifest.xml la siguiente declaracion:

<uses-library android:name="com.google.android.maps" />

Una vez que hemos configurado el layout para que aparezca el mapa y hemos creadola clave que nos permitira descargar mapas de google, vamos a ver el codigo necesariopara mostrar nuestra localizacion en dicho mapa.

private void showMap(){

12

Page 13: Desarrollo en Android PDF

if (mapView == null)mapView = (MapView) findViewById(R.id.myMapView);

MapController mapControl = mapView.getController();

geoPoint = new GeoPoint((int) (currentLocation.getLatitude() * 1000000),(int) (currentLocation.getLongitude() * 1000000));

mapControl.setZoom(20);mapControl.animateTo(geoPoint);

if (myposOverlay == null)myposOverlay = new PositionOverlay();

elsemapView.removeAllViews();

final List<Overlay> overlays = mapView.getOverlays();overlays.clear();overlays.add( myposOverlay );

myposOverlay.setLocation(currentLocation);

mapView.setClickable(true);

}

Como vemos en el anterior codigo, conectaremos el widget mapView a la definicion demapview del archivo Manifest.xml. Despues calcularemos las coordenadas en el mapagracias a la localizacion actual que se ha obtenido a traves del GPS. Y por ultimoanadiremos un Overlay o capa al mapa para mostrar nuestro nombre al lado de laposicion.

public class PositionOverlay extends Overlay{

private final int mRadius = 5;private Location myLocation

public void setLocation (Location loc){

myLocation = loc;

13

Page 14: Desarrollo en Android PDF

}

@Overridepublic void draw(Canvas canvas, MapView mapView, boolean shadow){

GeoPoint geoPoint = new GeoPoint((int) (myLocation.getLatitude() * 1000000),(int) (myLocation.getLongitude() * 1000000));

Point point= new Point();Projection projection = mapView.getProjection();

projection.toPixels(geoPoint, point);

RectF oval = new RectF (point.x - mRadius, point.y - mRadius,point.x + mRadius, point.y + mRadius);

Paint paint = new Paint();paint.setARGB(250,255,0,0);paint.setAntiAlias(true);paint.setFakeBoldText(true);

Paint backPaint = new Paint();backPaint.setARGB(175,0,0,0);backPaint.setAntiAlias(true);

String text = "My Name";RectF backRect = new RectF (

point.x + 2 + mRadius, point.y - 3*mRadius,point.x + 60, point.y + mRadius);

canvas.drawOval(oval,paint);

canvas.drawRoundRect(backRect, 5, 5, backPaint);

canvas.drawText (text, point.x + 2*mRadius, point.y, paint);

}

Por ultimo, solo nos quedara anadir el codigo correspondiente para que cuando seencuentre la senal de GPS, se llame al metodo showMap que es el encargado de mostrar

14

Page 15: Desarrollo en Android PDF

nuestra posicion en el mapa.

private Handler handler = new Handler() {

[...]if (currentLocation!=null) {

txtLocation.setText("Current Position: " +currentLocation.toString() );

// This method show our position in the map.showMap();

}[...]}

Figure 2: Pantalla de la ActivityMap

5.3 Desarrollo de una ’ActivityList’

Despues de ver como creamos una Activity o una ActivityMap vamos a ver como crearuna ActivityList que nos ayudara disenar listas facilmente.

La idea principal de una ActivityList es la creacion de un layout que nos permiterepresentar una lista con informacion. En nuestro ejemplo, vamos a mostrar una listacon informacion de nuestros amigos. Por tanto lo primero, vamos a disenar el layout.

15

Page 16: Desarrollo en Android PDF

<?xml version="1.0" encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center_vertical"android:paddingTop="3dip"android:paddingBottom="3dip">

<ImageViewandroid:id="@+id/image"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

<LinearLayoutandroid:layout_width="0dip"android:layout_weight="1"android:layout_marginLeft="6dip"android:layout_marginRight="6dip"android:layout_height="wrap_content"android:orientation="vertical">

<TextViewandroid:id="@+id/name"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="18dip"android:maxLines="2"android:textColor="?android:attr/textColorPrimary"

/>

<TextViewandroid:id="@+id/info"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="16dip"android:maxLines="3"

16

Page 17: Desarrollo en Android PDF

android:textColor="?android:attr/textColorPrimary"/>

</LinearLayout>

</LinearLayout>

Como vemos, solo generamos el layout para el tipo de file que tendra la lista. Dichafila contiene dos columnas (dos LinearLayout): la primera es una imagen, y la segundase compone de dos TextView donde mostraremos el nombre e informacion de nuestrosamigos.

public class FriendList extends ListActivity {

public class Friend{

public Bitmap image;public String name;public String info;

}

FriendsAdapter mAdapter;

static private ArrayList<Friend> mList;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// This method must be return the information of friends.mList = getFriendList();

// Adapter for ListViewmAdapter = new FriendsAdapter(this);setListAdapter(mAdapter);

}

public static class FriendsAdapter extends BaseAdapter {

17

Page 18: Desarrollo en Android PDF

private Context mContext;

public FriendsAdapter (Context c) {mContext = c;

}

public int getCount() {// TODO Auto-generated method stubreturn mList.size();

}

public Object getItem(int position) {// TODO Auto-generated method stubreturn position;

}

public long getItemId(int position) {// TODO Auto-generated method stubreturn position;

}

public View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubView view;

if (convertView == null) {// Make up a new viewLayoutInflater inflater = (LayoutInflater) mContext

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);view = inflater.inflate(R.layout.photolist, null);

} else {// Use convertView if it is availableview = convertView;

}

Friend friend = (Friend) mList.get(position);

ImageView img = (ImageView) view.findViewById(R.id.image);img.setImageBitmap(friend.image);

18

Page 19: Desarrollo en Android PDF

TextView t = (TextView) view.findViewById(R.id.name);t.setText( friend.name );

t = (TextView) view.findViewById(R.id.info);t.setText(friend.info);

return view;

}

}

Como podemos observar en el codigo anterior, la clase FriendList es una ActivityListen la cual hemos creado un adaptador personalizado para mostrar la informacion en lalista. Observar que el metodo getFriendList (que no esta detallado) debe devolver unalista con la informacion de los amigos.

Es necesario generar un adaptador para mostrar la lista, ya que Android solo permitegenerar listas automaticamente basadas en listas o arrays de enteros o strings. Siqueremos generar una lista mas compleja debemos crear nuestro propio adaptador, comohemos detallado en el codigo anterior.

Solo quedarıa dar los permisos correspondientes en el archivo Manifest.xml :

Figure 3: Pantalla de la ActivityList

<activity android:name="FriendList"></activity>

19

Page 20: Desarrollo en Android PDF

6 Menus y menus contextuales

Los menus es una parte importante de toda aplicacion, y mas en Android, ya que nospermite mostrar numerosa informacion cuando el usuario la solicite. En este apartadovamos a ver como implementar menus en pantalla y menus contextuales sobre listas.

6.1 Menus

Vamos a incorporar un menu en nuestra aplicacion para poder seleccionar si queremosutilizar el provider GPS o WiFi para obtener la localizacion.

private static final int MENU_LOCATION = Menu.FIRST + 1;private static final int MENU_LOCATION_GPS = Menu.FIRST + 2;private static final int MENU_LOCATION_WIFI = Menu.FIRST + 3;

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {

SubMenu sub = menu.addSubMenu (0, MENU_LOCATION, 0 , "Location").setIcon(R.drawable.mundo);

sub.add(0,MENU_LOCATION_GPS,0, "GPS");sub.add(0,MENU_LOCATION_WIFI,0, "WIFI");

return true;}

En el anterior codigo implementamos el metodo onCreateOptionsMenu para detallarlas partes que tendra nuestro menu. En nuestro caso, hemos creado un menu principalllamado “Location” que tiene dos sub-menus “GPS” y “WIFI”.

@Overridepublic boolean onOptionsItemSelected (MenuItem item) {

switch (item.getItemId()) {

case MENU_LOCATION_GPS:

LocationType = LocationManager.GPS_PROVIDER;

break;

20

Page 21: Desarrollo en Android PDF

case MENU_LOCATION_WIFI:

LocationType = LocationManager.NETWORK_PROVIDER;

break;

}

return super.onOptionsItemSelected(item);

}

En el codigo anterior, implementamos el metodo onOptionsItemSelected para definirque acciones se llevan a cabo cuando se seleccionan estas opciones en el sub-menu.

Figure 4: Pantallas de menu y sub-menu

6.2 Menus Contextuales

Los menus contextuales son aquellos menus que aparecen dependiendo del contexto quetengas en la aplicacion. Por ejemplo, vamos a ver un caso donde podemos mostrar unmenu contextual cuando se realiza una pulsacion prolongada sobre un item de una lista.

Lo primero que haremos sera anadir el siguiente codigo en el metodo onCreate de laactividad FriendList :

registerForContextMenu(this.getListView());

21

Page 22: Desarrollo en Android PDF

A continuacion sobre-escribiremos el siguiente metodo para detallar que menusapareceran:

private static final int MENU_DELETE_FRIEND = Menu.FIRST + 1;private static final int MENU_MONITOR_FRIEND = Menu.FIRST + 2;

@Overridepublic void onCreateContextMenu(ContextMenu menu, View view,ContextMenuInfo menuInfo){

if (friends){

menu.add (0, MENU_DELETE_FRIEND, 0, ‘‘Delete Friend’’);menu.add (0, MENU_MONITOR_FRIEND, 0,’’Monitors yourFriend’’);

}}

Y para finalizar, deberemos detallar las acciones que queremos ejecutar cuando sepulsen estos menus:

@Overridepublic boolean onContextItemSelected(MenuItem item){

AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();Friend myFriend = (Friend) mList.get(info.position);

switch (item.getItemId()) {

case MENU_DELETE_FRIEND:

deleteFriend(friend.getId());mList = getFriendList();mAdapter.notifyDataSetChanged();

break;

case MENU_MONITOR_FRIEND:

22

Page 23: Desarrollo en Android PDF

Intent i = new Intent(this,MonitoringMap.class);i.putExtra(‘‘userName’’, myFriend.name );

break;}

return true;}

Figure 5: Ejemplo de un menu contextual

7 Resumen

Recuerda:

� Una pantalla = Una actividad = Una clase

� El archivo Manifest.xml define los permisos y caracterısticas de la aplicacioncuando se ejecuta en el movil

� Estas programando en un sistema empotrado, piensa en eficiencia, eficiencia yeficiencia!!

� Android te ofrece diferentes tipos de procesos con ciclos de vida diferentes, estudiabien tu caso y haz un buen uso de ellos.

� Comparte tu codigo: es bueno para ti, es bueno para todos!

23