Вы находитесь на странице: 1из 4
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 418 2eizate (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! 2s 2enizte (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! ais 2enigore (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

Вам также может понравиться