P. 1
Desarrollo en Android PDF

Desarrollo en Android PDF

|Views: 4|Likes:
Publicado porP3pin

More info:

Published by: P3pin on Nov 07, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

09/21/2013

pdf

text

original

Desarrollo en Android (v1.

0)
Roberto Calvo Palomino (rocapal@libresoft.es) GSyC/LibreSoft June 17, 2009

1

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

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

(c) 2009 Roberto Calvo Palomino Esta obra est´ bajo una licencia Reconocimiento-Compartir a bajo la misma licencia 3.0 Espa˜a de Creative Commons. n Para ver una copia de esta licencia, visite http://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.

. . . . .1 Men´s . . . . . . . . . . . . . . . . . . . . . . . 6 de una ’ActivityMap’ . . . . . . .1 Desarrollo 5. . . . . . . . . . . . . . . . . . . . . . . . .2 Men´s Contextuales . . . . . . . . . . . . . . . . . . 12 de una ’ActivityList’ . . . .Contents 1 Introducci´n o 2 Qu´ es y qu´ no es este documento e e 3 Fundamentos de una aplicaci´n Android o 4 Ciclo de vida de una aplicaci´n Android o 5 Desarrollo en 5. . . . . . . . 15 6 Men´ s y men´ s contextuales u u 20 6. . . . . . . . 20 u 6. . . . . . . . .3 Desarrollo 4 4 4 5 Android 6 de una ’Activity’ . . . . . . . . . . . . 21 u 7 Resumen 23 3 . . . . . . . . . . . . . . . . . . . . . . . . . . .2 Desarrollo 5.

eclipse . potente y fiable para o programar en sistemas m´viles.android.com/guide/basics/what-is-android. gps y servicios en tu aplicaci´n Android. o o o Desde su lanzamiento.wikipedia. activityList y services.) n a ˆ es un documento explicativo sobre la filosof´ de Android.. a o ˆ te ense˜ar´ a utilizar mapas.org/wiki/Open Handset Alliance 4 . ıa ˆ es un documento avanzado sobre programaci´n en JAVA/Android. En este documento vamos a realizar una introducci´n o o a la programaci´n en la plataforma Android cuyo fin ser´ que podamos construir una o a aplicaci´n sencilla basada en activity.1 Introducci´n o Android es el sistema operativo de Google especialmente dise˜o para ejecutar en n dispositivos m´viles. o Lecturas recomendadas sobre esta secci´n: o ˆ What is Android? http://developer. Todo naci´ all´ por el 2007 cuando se estableci´ la OHA (Open o o a o Handset Alliance) 1 que se conforma por m´s de 40 empresas relacionadas con la a fabricaci´n (hardware y software) y distribuci´n de dispositivos m´viles. o o ˆ te describir´ los distintos procesos existentes en Android. Android provee cuatro tipos diferentes de o o componentes: 1 http://en. numerosos programadores han encontrado en este sistema operativo la primera plataforma de programaci´n sencilla.. n a o Este documento NO: ˆ te ense˜ar´ a instalar el entorno (sdk.html 2 Qu´ es y qu´ no es este documento e e Este documento SI: ˆ es una introducci´n a la programaci´n en Android. activityMap. o 3 Fundamentos de una aplicaci´n Android o La plataforma de Android proporciona diferentes componentes a la hora de programar en funci´n del objetivo de tu aplicaci´n. a ˆ te ayudar´ a realizar tu primera aplicaci´n Android.

android. u ˆ Broadcast receivers: Este tipo de componentes se utilizan para recibir y reaccionar ante ciertas notificaciones broadcast. la actividad previa es puesta en pausa y agregada el “history stack” y no volver´ al estado de ejecuci´n hasta que a o vuelva a ser invocada. a a o Una caracter´ ıstica peculiar en Android es que el tiempo de vida de un proceso no es controlado directamente por la aplicaci´n.. en una aplicaci´n de a o listado de tel´fonos utilizar´ e ıamos dos actividades. ıa ˆ Intent: Este tipo de componentes es una clase especial que usa Android para moverse de una pantalla a otra. pero puede ejecutarse en a “background” por un tiempo indefinido (se asemeja mucho al demonio de los sistemas Linux). Este tipo de componentes no tienen interfaz gr´fica y pueden reaccionar ante eventos como cambio de zona horarias. Lecturas recomendadas: ˆ Application Fundamentals http://developer. Cualquiera activity puede reutilizar funcionalidades de otros componentes con solo hacer una solicitud en la forma de Intent. Una para mostrar el listado de nombres y tel´fonos y la segunda. Android prioriza los procesos bajo una jerarqu´ para asignar a cada proceso ıa una importancia en el sistema. La navegaci´n entre las pantallas se realiza iniciando nuevas o actividades. ˆ Services: Un servicio no tiene interfaz gr´fica. a T´ ıpicamente una actividad representa una pantalla individual en el terminal y presenta una interfaz gr´fica al usuario. Por ejemplo.com/guide/topics/fundamentals. Todos los receivers heredan de la clase base BroadcastReceiver. Mientras tanto el usuario puede seguir realizando otras tareas. Por ejemplo. Es el sistema quien decide y determina el o tiempo de vida bas´ndose en el uso y capacidades del sistema. Un Intent describe lo que una aplicaci´n desea o hacer.html 4 Ciclo de vida de una aplicaci´n Android o En la mayor´ de los casos. una aplicaci´n Android ejecuta dentro de su propio proceso ıa o Linux. a Para determinar que procesos deber´ ser eliminados ante una condici´n baja de ıan o memoria. para mostrar la informaci´n detallada del e o contacto seleccionado. llamadas. a nivel de bater´ . podemos utilizar un servicio para que vaya capturando cada cierto tiempo la posici´n GPS y nos avise cuando estemos cerca o de alg´n amigo.. Cuando una actividad es abierta. El proceso es creado para ejecutar el c´digo de la aplicaci´n y es el sistema quien o o pedir´ y reclamar´ su memoria para reasignarla a otra aplicaci´n.ˆ Activity: Una actividad es el componente m´s usado en las aplicaciones Android. Existen diferentes procesos de acuerdo a esta jerarqu´ ıa: 5 .

Este tipo de procesos no son visibles y suelen ser e importantes para el usuario (conexi´n con servidores. Vamos a ´ crear una actividad que contenga un bot´n y una etiqueta (textview) para mostrar la o posici´n GPS actual. 5. 5 Desarrollo en Android Una vez que hemos explicado los diferentes procesos y sus ciclos de vida dentro del sistema operativo Android.xml a para ejecutar la actividad y para tener acceso al GPS. reproducci´n de m´sica). <!-. o o u ˆ Background Process: Es un proceso que aloja una activity que no es actualmente visible para el usuario (su m´todo onStop() ha sido llamado). La raz´n de existir u o de este proceso es tener una cache disponible de la aplicaci´n para su pr´xima o o activaci´n. que el sistema elimine este tipo de procesos con frecuencia o u para obtener memoria disponible. Es muy usual que existan numerosos procesos de este tipo en el sistema. ´ ˆ Empty Process: Es un proceso que no aloja ning´n componente.ˆ Foreground Process: Es un proceso de primer plano que aloja una activity en la pantalla y con la que el usuario est´ interactuando (su m´todo onResume() ha sido a e llamado) ´ que un IntentReceiver est´ ejecut´ndose. ´ ˆ Visible Process: Es un proceso que aloja una activity pero no est´ en primera a plano (su m´todo onPause() ha sido llamado). que unicamente tenga un par de componentes y una finalidad clara. Es com´n. vamos a pasar a detallar la implementaci´n de alguno de o estos procesos. a o simple. Esto ocurre en situaciones donde la e aplicaci´n muestra una cuadro de dialogo para interactuar con el usuario. Adem´s no hay que olvidarse de dar los permisos oportunos en el archivo Manifest. Este tipo o de procesos no ser´ eliminado a caso que sea necesaria la memoria para mantener a a todos los procesos del primer plano corriendo. o En un proyecto nuevo o existente es necesario crear la actividad LocationActivity. Este tipo de procesos ser´n o a a a eliminados como ultimo recurso si el sistema necesitase memoria. Normalmente la e eliminaci´n de estos procesos no suponen un gran impacto para la actividad del o usuario.Activity permission --> <activity android:name="LocationActivity"></activity> 6 .1 Desarrollo de una ’Activity’ El primer ejemplo pr´ctico que vamos a ver es la creaci´n de una actividad sencilla. por lo que el sistema mantiene una lista para asegurar que el ultimo proceso visto ´ por el usuario sea el ultimo en eliminarse en caso de necesitar memoria. ˆ Service Process: Es un proceso que aloja un service que ha sido iniciado con el m´todo startService().

o <?xml version="1.GPS permission --> <uses-permission android:name="android.<!-. o o 7 . Ser´ una interfaz sencilla donde tendremos un bot´n y un a a o textview para mostrar nuestra localizaci´n.com/apk/res/android" > <Button android:id="@+id/btUpdate" android:layout_width="137px" android:layout_height="43px" android:text="Update GPS" android:layout_x="90px" android:layout_y="44px" > </Button> <TextView android: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. vamos a pasar a la descripci´n del c´digo de la clase.0" encoding="utf-8"?> <AbsoluteLayout android:id="@+id/widget0" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.xml) de la interfaz y los permisos correspondientes.ACCESS_FINE_LOCATION"> </uses-permission> Ahora lo que crearemos es el layout (escrito en xml) que representa la interfaz gr´fica a que tendr´ nuestra actividad.permission.

protected void onCreate(Bundle savedInstanceState) { super. 8 . txtLocation = (TextView) this. } public void onClick(View arg0) { updateSignalGPS().main). que ejecutar´ el m´todo o a e updateSignalGPS que se detallar´ en las siguientes l´ a ıneas.id.tvGPS). } El m´todo onCreate se encarga de iniciar la actividad por primera vez.findViewById(R. btUpdate = (Button)this. btUpdate. un Button y un TextView. o a o ´ Unicamente tenemos dos.id.setOnClickListener(this).onCreate(savedInstanceState). Button btUpdate. y adem´s implementa a las interfaces OnClickListener (para poder capturar los eventos onClick del bot´n) y o Runnable (ya que vamos a ejecutar en un thread aparte la obtenci´n de la posici´n o o GPS). private LocationManager mLocationManager. Location currentLocation. Es importante comentar que al bot´n le establecemos un listener para el evento onClick. { private private private private ProgressDialog pd. TextView txtLocation.layout. setContentView(R.public class LocationActivity extends Activity implements Runnable. OnClickListener Nuestra clase LocationActivity hereda de la clase Activity. por ello e realizamos la conexi´n de los widgets gr´ficos con la definici´n del archivo xml.findViewById(R. private MyLocationListener mLocationListener.btUpdate). private Location mLocation.

OnCancelListener dialogCancel = new DialogInterface. mLocationListener = new MyLocationListener(). pd = ProgressDialog. mLocationListener).LOCATION_SERVICE).OnCancelListener() { public void onCancel(DialogInterface dialog) { } }. if (mLocationManager. true.".prepare(). dialogCancel). true.GPS_PROVIDER)) { Looper.loop(). "Searching. mLocationManager. el m´todo writeSignalGPS instancia un ’processDialog’ para que se e muestre en pantalla mientras se encuentra la posici´n GPS. Thread thread = new Thread(this).requestLocationUpdates( LocationType. y adem´s ejecuta el thread o a cuyo c´digo mostramos a continuaci´n: o o public void run() { mLocationManager = (LocationManager)getSystemService(Context.show(this. thread. "Searching GPS Signal".isProviderEnabled(LocationManager.. 0. Looper. } Como vemos.private void writeSignalGPS() { DialogInterface.start(). 9 .. 0.

Bundle extras) { // TODO Auto-generated method stub } } Es necesario implementar un LocationListener para ejecutar nuestro c´digo cuando o el sistema encuentra la posici´n GPS.sendEmptyMessage(0). o private class MyLocationListener implements LocationListener { public void onLocationChanged(Location loc) { if (loc != null) { handler. } } En el c´digo anterior del thread podemos ver como se configura el provider de GPS o como fuente de localizaci´n. Toast. o e nos indicar´ que la posici´n GPS ha cambiado y por tanto podemos escribir dicha a o 10 .LENGTH_LONG).makeText(getBaseContext(). } } 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. } else { Toast. "Signal GPS not found". int status.myLooper().show().quit(). Cuando el m´todo onLocationChanged se llame.Looper.

mLocationManager. no o podemos acceder a la interfaz gr´fica para modificar el textview (es una caracter´ a ıstica t´ ıpica de los sistemas gr´ficos). podemos ver como el manejador que hemos implementado es llamado ´ cuando se encuentra la posici´n GPS y por tanto desde aqu´ si podemos actualizar la o ı interfaz gr´fica. } } }. Por ello vamos a utilizar el mecanismo de paso de a mensajes que Android implementa como Handlers. Por ultimo.dismiss(). Como nos encontramos ejecutando un thread. por lo que mostramos la informaci´n en el textview txtLocation a o Figure 1: Pantalla de la Activity 11 .removeUpdates(mLocationListener).setText("Current Position: " + currentLocation.informaci´n en nuestra actividad. private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { pd. if (currentLocation!=null) { txtLocation.toString() ).

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. Para generar la clave seguir los siguientes pasos: $ keytool -list -keystore ~/. OnClickListener A˜adiremos en el layout el widget del mapa: n { <view class="com.android.google.com/intl/es-ES/android/maps-api-signup..android/debug.google. necesitamos un apiKey para poder utilizar los mapas de google desde Android.google. Por ultimo s´lo nos queda a˜adir en el archivo Manifest. Cuando obtengas tu clave guardala en un sitio seguro y a˜´dela al layout. Certificate fingerprint (MD5): 94:1E:43:49:87:73:BB:E6:A6:88:D7:20:F1:8E:B5:98 Despu´s deber´s ir a la siguiente url e a http://code.5.android. vamos a ver el c´digo necesario a o para mostrar nuestra localizaci´n en dicho mapa. vamos a ver como incluir un 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.xml la siguiente declaraci´n: ´ o n o <uses-library android:name="com.keystore ..html y obtener tu clave a partir del MD5 que se ha generado anteriormente. concretamente en la etiqueta na android:apiKey.maps. o private void showMap() { 12 .maps" /> Una vez que hemos configurado el layout para que aparezca el mapa y hemos creado la clave que nos permitir´ descargar mapas de google.2 Desarrollo de una ’ActivityMap’ Una vez que sabemos desarrollar sin problemas una activity.

removeAllViews(). (int) (currentLocation.setLocation(currentLocation). MapController mapControl = mapView. Y por ultimo o e ´ a˜adiremos un Overlay o capa al mapa para mostrar nuestro nombre al lado de la n posici´n. if (myposOverlay == null) myposOverlay = new PositionOverlay(). o public class PositionOverlay extends Overlay { private final int mRadius = 5. overlays. mapControl.add( myposOverlay ).clear(). Despu´s calcularemos las coordenadas en el mapa e gracias a la localizaci´n actual que se ha obtenido a trav´s del GPS.id. mapView. overlays. conectaremos el widget mapView a la definici´n de o o mapview del archivo Manifest. geoPoint = new GeoPoint( (int) (currentLocation.if (mapView == null) mapView = (MapView) findViewById(R. myposOverlay. } Como vemos en el anterior c´digo.getLatitude() * 1000000).setZoom(20). mapControl. final List<Overlay> overlays = mapView.animateTo(geoPoint). 13 . private Location myLocation public void setLocation (Location loc) { myLocation = loc.myMapView).getOverlays().setClickable(true).getLongitude() * 1000000)).xml. else mapView.getController().

drawText (text.mRadius. point). Paint backPaint = new Paint().getProjection(). canvas. point. point. point.x + 2*mRadius. canvas.x . 5.0.y .y + mRadius).0).toPixels(geoPoint. paint.y.getLongitude() * 1000000)).} @Override public void draw(Canvas canvas.0. RectF backRect = new RectF ( point.x + 60.setFakeBoldText(true).setAntiAlias(true). canvas. MapView mapView. point. Paint paint = new Paint(). Projection projection = mapView. RectF oval = new RectF (point. projection.getLatitude() * 1000000).setARGB(250. boolean shadow) { GeoPoint geoPoint = new GeoPoint( (int) (myLocation.0). (int) (myLocation. String text = "My Name". se llame al m´todo showMap que es el encargado de mostrar n e 14 . paint. backPaint.setAntiAlias(true).paint).y . paint). } Por ultimo. point. 5.drawOval(oval.setARGB(175. point.mRadius.3*mRadius. point.0. backPaint).x + mRadius. Point point= new Point(). point.y + mRadius). paint.255.drawRoundRect(backRect. s´lo nos quedar´ a˜adir el c´digo correspondiente para que cuando se ´ o a n o encuentre la se˜al de GPS.x + 2 + mRadius. backPaint.

setText("Current Position: " + currentLocation. a n a La idea principal de una ActivityList es la creaci´n de un layout que nos permite o representar una lista con informaci´n.] } Figure 2: Pantalla de la ActivityMap 5.. o n 15 . Por tanto lo primero. showMap().. } [.. o private Handler handler = new Handler() { [.toString() ). // This method show our position in the map.3 Desarrollo de una ’ActivityList’ Despu´s de ver como creamos una Activity o una ActivityMap vamos a ver como crear e una ActivityList que nos ayudar´ dise˜ar listas f´cilmente. vamos a mostrar una lista o con informaci´n de nuestros amigos. En nuestro ejemplo. vamos a dise˜ar el layout.] if (currentLocation!=null) { txtLocation.nuestra posici´n en el mapa..

0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.<?xml version="1.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" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="0dip" android:layout_weight="1" android:layout_marginLeft="6dip" android:layout_marginRight="6dip" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="18dip" android:maxLines="2" android:textColor="?android:attr/textColorPrimary" /> <TextView android:id="@+id/info" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="16dip" android:maxLines="3" 16 .android.

mList = getFriendList(). public class FriendList extends ListActivity { public class Friend { public Bitmap image.android:textColor="?android:attr/textColorPrimary" /> </LinearLayout> </LinearLayout> Como vemos. Dicha a fila contiene dos columnas (dos LinearLayout): la primera es una imagen. // This method must be return the information of friends. public String name. } public static class FriendsAdapter extends BaseAdapter { 17 . setListAdapter(mAdapter). public String info. public void onCreate(Bundle savedInstanceState) { super. } FriendsAdapter mAdapter.onCreate(savedInstanceState). y la segunda se compone de dos TextView donde mostraremos el nombre e informaci´n de nuestros o amigos. solo generamos el layout para el tipo de file que tendr´ la lista. static private ArrayList<Friend> mList. // Adapter for ListView mAdapter = new FriendsAdapter(this).

inflate(R.findViewById(R.setImageBitmap(friend. img.LAYOUT_INFLATER_SERVICE). public FriendsAdapter (Context c) { mContext = c.image). } public View getView(int position. } public long getItemId(int position) { // TODO Auto-generated method stub return position. 18 . ViewGroup parent) { if (convertView == null) { // Make up a new view LayoutInflater inflater = (LayoutInflater) mContext . null).layout.photolist. } public Object getItem(int position) { // TODO Auto-generated method stub return position. } else { // Use convertView if it is available view = convertView. } Friend friend = (Friend) mList. view = inflater.size().getSystemService(Context.image). // TODO Auto-generated method stub View view.get(position). } public int getCount() { // TODO Auto-generated method stub return mList. ImageView img = (ImageView) view. View convertView.id.private Context mContext.

setText(friend.id.name).info). Observar que el m´todo getFriendList (que no est´ detallado) debe devolver una e a lista con la informaci´n de los amigos.info). } } Como podemos observar en el c´digo anterior.name ). ya que Android solo permite generar listas autom´ticamente basadas en listas o arrays de enteros o strings. o S´lo quedar´ dar los permisos correspondientes en el archivo Manifest. Si a queremos generar una lista m´s compleja debemos crear nuestro propio adaptador. t = (TextView) view.findViewById(R.findViewById(R.xml : o ıa Figure 3: Pantalla de la ActivityList <activity android:name="FriendList"></activity> 19 . return view. la clase FriendList es una ActivityList o en la cual hemos creado un adaptador personalizado para mostrar la informaci´n en la o lista. como a hemos detallado en el c´digo anterior. o Es necesario generar un adaptador para mostrar la lista.setText( friend.id.TextView t = (TextView) view. t. t.

@Override public boolean onCreateOptionsMenu(Menu menu) { SubMenu sub = menu.0. hemos creado un men´ principal a u u llamado “Location” que tiene dos sub-men´s “GPS” y “WIFI”. } En el anterior c´digo implementamos el m´todo onCreateOptionsMenu para detallar o e las partes que tendr´ nuestro men´.0.drawable. sub. "GPS"). En este apartado o vamos a ver como implementar men´s en pantalla y men´s contextuales sobre listas.MENU_LOCATION_GPS.FIRST + 1. private static final int MENU_LOCATION_GPS = Menu.FIRST + 2. break. En nuestro caso. private static final int MENU_LOCATION_WIFI = Menu.setIcon(R. return true.FIRST + 3. ya que nos u o a permite mostrar numerosa informaci´n cuando el usuario la solicite. y m´s en Android.1 Men´ s u Vamos a incorporar un men´ en nuestra aplicaci´n para poder seleccionar si queremos u o utilizar el provider GPS o WiFi para obtener la localizaci´n. u u 6.add(0. "Location") .6 Men´ s y men´ s contextuales u u Los men´s es una parte importante de toda aplicaci´n.getItemId()) { case MENU_LOCATION_GPS: LocationType = LocationManager.GPS_PROVIDER.MENU_LOCATION_WIFI.mundo). sub. o private static final int MENU_LOCATION = Menu. MENU_LOCATION. u @Override public boolean onOptionsItemSelected (MenuItem item) { switch (item. 20 . "WIFI").add(0. 0 .addSubMenu (0.

21 .getListView()). break.onOptionsItemSelected(item). } En el c´digo anterior.NETWORK_PROVIDER. vamos a ver un caso donde podemos mostrar un o men´ contextual cuando se realiza una pulsaci´n prolongada sobre un item de una lista.2 Men´ s Contextuales u Los men´s contextuales son aquellos men´s que aparecen dependiendo del contexto que u u tengas en la aplicaci´n. implementamos el m´todo onOptionsItemSelected para definir o e que acciones se llevan a cabo cuando se seleccionan estas opciones en el sub-men´. u o Lo primero que haremos ser´ a˜adir el siguiente c´digo en el m´todo onCreate de la a n o e actividad FriendList: registerForContextMenu(this. } return super. u Figure 4: Pantallas de men´ y sub-men´ u u 6.case MENU_LOCATION_WIFI: LocationType = LocationManager. Por ejemplo.

break. } } Y para finalizar. private static final int MENU_MONITOR_FRIEND = Menu.add (0.add (0.get(info.FIRST + 1.notifyDataSetChanged(). mList = getFriendList(). 0.position). Friend myFriend = (Friend) mList. ‘‘Delete Friend’’). MENU_DELETE_FRIEND. MENU_MONITOR_FRIEND.FIRST + 2. View view.getMenuInfo(). case MENU_MONITOR_FRIEND: 22 . deberemos detallar las acciones que queremos ejecutar cuando se pulsen estos men´s: u @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item. 0.getId()). menu. switch (item.’’Monitors your Friend’’).A continuaci´n sobre-escribiremos el siguiente m´todo para detallar que men´s o e u aparecer´n: a private static final int MENU_DELETE_FRIEND = Menu. mAdapter. @Override public void onCreateContextMenu(ContextMenu menu.getItemId()) { case MENU_DELETE_FRIEND: deleteFriend(friend. ContextMenuInfo menuInfo) { if (friends) { menu.

ˆ Comparte tu c´digo: es bueno para ti. estudia bien tu caso y haz un buen uso de ellos. break. myFriend.class).putExtra(‘‘userName’’. } Figure 5: Ejemplo de un men´ contextual u 7 Resumen ˆ Una pantalla = Una actividad = Una clase ˆ El archivo Manifest. } return true.name ). es bueno para todos! o Recuerda: 23 .Intent i = new Intent(this.MonitoringMap.xml define los permisos y caracter´ ısticas de la aplicaci´n o cuando se ejecuta en el m´vil o ˆ Est´s programando en un sistema empotrado. i. piensa en eficiencia. eficiencia y a eficiencia!! ˆ Android te ofrece diferentes tipos de procesos con ciclos de vida diferentes.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->