2evnigo1e (Cémo obtener un resultado de una actividad | Android Developers
ia Android Developers
Cémo obtener un resultado de una actividad
En esta leccién, aprendetds a realizar lo siguiente:
Iniciar la actividad
Recibir el resultado
También debes leer:
Cémo compartir datos simples
Cémo compartir archivos
El inicio de otta actividad no siempre tiene que ser en un Gnico sentido. También puedes iniciar otra
actividad y recibir un resultado. Para recibir un resultado, llama a startactivityrorResult()
(nttps://developer android. con/reference/android/app/Activity.htnlistarsactivityrortesult(ardroid.content.tntent, int)) (EN.
lugar de startactivity()
(wesps://developes andro. con/refernce/androld/app/Aetivity.ntnlestarcactivty(anérota.contet.antent))).
Por ejemplo, tu app puede iniciar una app de cémara y recibir la fotografia tomada como resultado. 0 bien, puedes
Iniciar la app Personas para que el usuario seleccione un contacto, yrecibirds los detalles del contacto como
resultado.
Por supuesto, la actividad que responde debe estar disefiada para devolver un tesultado. Cuando es asi, envia el
resultado en forma de otto objeto Intent ¢nctps://developer.android.con/reFerence/androié/content/ntent.htmi). TU
actividad lo recibe en la devolucién de llamada onactivityResult()
{ttps://developer.android.con/reference/android/app/activity.htmluonactivityResult(int, int, android.content.tntent)).
Nota: Puedes utilizar intents explicitas o implicitas cuando llamas a startactivityForResult()
(nttps://developer.androtd.con/reference/android/app/Activity.ntnl#startAct vityForResult(android.content.Intent, int).
Cuando inicias una de tus propias actividades para recibir un resultado, debes utilizar una intent explicita para
asegurarte de recibir el resultado esperado
Iniciar la actividad
El objeto Intent (netps://developer.androtd.con/reference/androie/content/intent. heal) emmpleado para iniciar una
actividad que mostrar un resultado no tiene nada de particular, peto debes pasar un argumento de valor entero
4182eizate (Cémo obtener un resultado de una actividad | Android Developers
adicional al método startactivityForResult()
(nteps://developer android. con/reFerence/android/app/Activity .ntml#startactivityForResult(androld.content.Zntent, int).
El aigumento de entero es un “cédigo de solicitud’ que identifica tu solicitud. Cuando recibes el Intent
(https: //developer. android. con/reference/android/content/Intent.htm1) de resultado, la devolucién de llamada proporciona
el mismo cédigo de solicitud para que tu app pueda identificar debidamente el resultado y determinar como
manejarl.
Por ejemplo, a continuacién se indica cémo iniciar una actividad que permite que el usuario elija un contacto:
static final int PICK_CONTACT_REQUEST = 1; // The request code
private void pickcontact() (
Intent pickContactIntent = new Intent (Intent .ACTION PICK, Uri.parse("content://contacts"));
pickcontactintent. setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST) ;
Recibir el resultado
Cuando el usuario termina de utilizar la actividad subsiguiente y vuelve, el sistema llama al método
onActivityResult() (nttps://developer.androtd.cor/reference/android/app/Activity htrldonactivityResult(int, int,
android. content Intent)) de tu actividad. Este método incluye tres argumentos:
+ Elcédigo de solicitud que pasaste a startactivityForResult()
(nteps://developer. android. con/neFerence/android/app/Activity.htmlastartactivityFonResult(androld.content.tntent, int).
«Un cédigo de resultado especificado por la segunda actividad, Este cédigo puede ser RESULT_OK
(nteps:/ developer. android. con/reference/androtd/agp/activity.ntmiskesutt_ox) Si la opetacién se realiz6 correctamente
‘ORESULT_CANCELED (https: //developer android. con/reference/androse/app/Activity. htal#RESULT_cANCELED) Si el USUATIO
cancelé la operacién o esta fallé por algun motivo,
‘# Un intent (nttps://developer.ancroia.con/neference/androtd/content/Tatent heal) con la informacién del resultado.
Por ejemplo, a continuacién se muestra cémo puede manejar el resultado de la intent ‘elegir un contacta!
Goverride
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == PICK_CONTACT_REQUEST) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
// The user picked a contact.
// The Intent's data Uri identifies which contact was selected.
// Do something with the contact here (bigger example below)
+
hpe:ideveloper android. comvtraininglbasis/ntensiresulLhim! 2s2enizte (Cémo obtener un resultado de una actividad | Android Developers
En este ejemplo, el resultado Intent (nttps://developer. android. con/reference/androié/content/Intent.htal) devuelto por
la app Personas de Android proporciona un Uri (https://developer.android.con/reference/android/net/Uri.html) de
contenido que identifica al contacto que el usuario seleccion6,
Para manejar cortectamente el resultado, debes comprender cudl serd el formato del intent
(nteps://developer. android. con/reFerence/android/content/ntent.henl) del resultado. Esto es facil cuando la actividad que
devuelve el resultado es una de sus propias actividades. Las apps incluidas con la plataforma Android oftecen sus
ropias API, que puedes utilizar para obtener datos de resultados especificos. Por ejemplo, la app Personas
siempre muestra un resultado con el URI de contenido que identifica al contacto seleccionado, y la app Camara
devuelve Un Bitmap (netps://developer.androis.con/reference/androis/araphics/Bitmap. heel) en el elemento adicional
“data” (consulta la clase Cémo tomar fotos (itpsnleveloperendicid comvrainna/camete index im).
Extra: Leer los datos de un contacto
En el c6digo anterior que muestra cémo obtener un resultado de la app Personas, no se explica la manera de leer
los datos del resultado porque esto requiere un analisis mas avanzado sobre los proveedores de contenido
(rtips:j/developerendrcid com/auide topics /providere /oontent-prcviders.Hmi). Sin embaigo, si tienes curiosidad, a continuacién
se incluye un cédigo que muestra cémo consultar el resultado para obtener el nimeto de teléfono del contacto
seleccionado
Goverride
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
// Check which request it is that we're responding to
if (requestCode == PICK_CONTACT_REQUEST) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
// Get the URI that points to the selected contact
Uri contactUri = data.getata();
// We only need the NUMBER column, because there will be only one row in the result
String[] projection = (Phone. NUMBER};
// Perform the query on the contact to get the NUMBER column
// We don't need a selection or sort order (there's only one result for the given URT)
// CAUTION: The query() method should be called from a separate thread to avoid blockiy
// your app's UI thread. (For simplicity of the sample, this code doesn't do that.)
// Consider using CursorLoader (nttps://developer.android.con/reference/andraid/content/CursorLoader
Cursor cursor = getContentResolver()
-query(contactUri, projection, null, null, null);
cursor.moveToFirst();
// Retrieve the phone number from the NUMBER column
int column = cursor.getColunnIndex(Phone. NUMBER) ;
String nunber = cursor.getString(colunn) ;
// Do something with the phone nunber:
htpe:ideveloper android.comvtraininglbasie/ntensiresulthim! ais2enigore (Cémo obtener un resultado de una actividad | Android Developers
Nota: En versiones de Android anteriores a la 2.3 (nivel de API 9), pata ejecutar una consulta en Contacts
Provider (https://developer. android. con/reference/android/provider/ContactsContract.contacts. html) (como la que se
muestra anteriormente), tu app debe declarar el permiso READ_CONTACTS
(nttps:/ /developer.android.con/eference/androtd/Mani fest pernission.htnlaRéAd_cONTACTS) (Consulta el documento sobre
seguridad y permisos (Itpe/jdeveloper.andreid com/aLideytopice /security seaurityhim)). Sin embargo, a partir de Android
2.3, la app Contactos/Personas otoiga a tu app un permiso temporal para leer desde el Proveedor de Contactos
cuando este muestra un resultado. El permiso temporal se aplica solo al contacto solicitado, por lo cual no
podrds consultar otro contacto que no sea el especificado por el uni
(ntsps:/ developer. android.con/eference/android/net/Urs.nta1) de la intent, a menos que declares el permiso
READ_CONTACTS (nttps://developer. android.con/reference/android/Manifest permission. trtmlEREAD_CONTACTS).
wv e a
htpe:ideveloper android.comvtraininglbasie/ntensiresulthim! ais