Aplicaciones Android

Ya no se necesita un estudio en profundidad del resultado de la actividad API-onActivityResult ()

Publicado originalmente el wajahatkarim.com

Desde que salió Android en 2007, Activity Siempre ha sido uno de sus componentes centrales. Una de las tareas más comunes en una aplicación es transferir datos entre dos actividades. Hasta ahora, Intents con onActivityResult Es la única opción.

Mediante la combinación de estas dos partes, los desarrolladores pueden transferir datos desde una. Activity A otro y recuperar los datos fácilmente.

Desarrollemos un ejemplo: su aplicación quiere capturar una imagen y mostrársela al adjudicatario.Puede escribir su propia cámara personalizada, o puede delegar la tarea de obtener imágenes a Android de las siguientes maneras Intents.En el segundo caso, el sistema Android abrirá la aplicación de Cámara preferida del adjudicatario, capturará la imagen y pasará los datos solicitados a su actividad llamando al posterior onActivityResult() método.

Estoy trabajando en el video tutorial para este artículo y lo subiré a mi canal de YouTube pronto. Suscríbete y mira más tutoriales de Android de este tipo.

Suscríbete a mi canal de youtube


Si es una imagen Bitmap La imagen en la aplicación de la cámara o la imagen en la corredor, o algunos resultados personalizados en otras actividades de la aplicación, el sistema Android llamará onActivityResult() El método en la solicitud diferente Activity o Fragment clase.

Si se encuentra con una situación de captura de imágenes, o se encuentra con múltiples situaciones, como congregar imágenes de una corredor, solicitar permisos para miles de millones de gráficos y usar otras pantallas de la aplicación para procesar sus propios datos personalizados, entonces Todos los resultados de la La operación solo puede ser procesada por un método. onActivityResult() . Y este método se verá así en tu código.

No creo que te guste este tipo de código para acertar y escribir. Yo siquiera hago esto. Porque este tipo de código traerá muchos problemas y errores no deseados, como:

  • Estrechamente acoplado: No hay otro extensión para poner o conceptualizar este código y razonamiento empresarial. Es como si quisieras separar cada caso de «captura de imagen» o «imagen seleccionada». No puedes hacer esto. Puede encargar más tarde, pero el punto de partida es este. Esto creará un clúster incorrecto utilizando bloques if-else anidados como el código mencionado.

  • Tipo de seguridad: Los errores menores pueden dar extensión a un tipo de datos incorrecto. Puede obtener el valía inconmovible como una prisión y luego brindar unas horas a depurar la razón por la que la aplicación no puede ejecutarse normalmente. Esto se debe a que confía en la secreto String para poner / acertar los datos de Intent. Debe comprobar de que está utilizando el tipo correcto para la secreto correcta.

  • NullPointerException no deseada: Quien no esta enojado NullPointerException ?Si comete un error tipográfico mientras escribe, puede poner o recuperar datos en él Intent , Conseguirás NullPointerException Es como el estallido de una granada en tu aplicación. Esto puede perder mucho tiempo porque es posible que esté depurando por qué los datos están vacíos. ¿Cómo debería pensar que pudo sobrevenir pasado por stop algunas saber en la secreto por error en ese momento?

Por eso, Google nos brinda una alternativa, su código es más fácil, no hay demasiados bloques if-else, en cada caso hay menos posiciones de encaje y separación, tipeo de seguridad para sostener que los datos correctos lleguen de la modo correcta, y no hay absolutamente ningún NullPointerException Por un error tipográfico.


No estoy seguro de llamarlo «API de resultado de actividad» o «entendimiento de resultado de actividad» o entreambos. Pero ciertamente suena adecuadamente.

Entablar desde Activity 1.2.0-alpha02 con Fragment 1.3.0-alpha02, Ahora tienes una buena concepto que manejar onActivityResult() Utilice este método en una estructura muy limpia y reutilizable.

Veamos cómo utilizar esta nueva API.


En primer extensión, debes build.gradle expediente.

Tenga en cuenta que en el momento de escribir este artículo, la última interpretación es 1.2.0-alpha04 con el fin de activity-ktx con 1.3.0-alpha04 con el fin de fragment-ktx . Puede consultar la última interpretación a través del enlace de Google Maven. Estas API aún se encuentran en la etapa Alfa, por lo que la API aún no se ha finalizado. Estos se pueden cambiar en cualquier momento.Este artículo se aplica a alpha04 Traducción, pero no se puede utilizar o no con versiones anteriores o posteriores.


El proceso de uso de esta nueva API se muestra a continuación.

Proceso de API de resultado de actividad

1. Crea un entendimiento

Primero, debe detallar un entendimiento o utilizar cualquier entendimiento existente.Se ejecuta el entendimiento ActivityResultContract interfaz.De la documentación, esto es Un entendimiento que especifica que la entrada de tipo I se puede utilizar para invocar actividades y producir una salida de tipo O.

Esto es un ejemplo SimpleContract Toma Integer como entrada y devuelve algunos datos de prisión de la actividad secundaria.

Esto createIntent() El método se utiliza para crear mercancía Intent Esto será entregado startActivityForResult() Una vez que se ardor al método de este entendimiento.con parseResult() El método actuará como onActivityResult() Método y analizar el resultado Intent Y extraer datos de él.

Puedes ver que no necesitamos ponerle un pedrusco if-else onActivityResult() Salida.Porque cada caso se manejará así en una implementación y un procesamiento separados parseResult() método. Esta es la belleza y la simplicidad de la API de resultados de actividad.

2. Acuerdo de registro

El posterior paso es registrarse SimpleContract API de resultados de actividad.Esto se hace llamando registerForActivityResult() método.

Tenga en cuenta que en versiones anteriores alpha02 con alpha03 , Este método se ardor prepareCall() .Pero en alpha04 , Este ha sido renombrado a registerForActivityResult() .

Verá lo manejable que es firmar un entendimiento. Y, con la simplicidad del querido Kotlin, obtendrás resultados en un atún método lambda.Esto estará en parseResult() El método en el entendimiento y le proporcionará el resultado (en nuestro ejemplo, una prisión anulable).Puede repasar el valía NULL para ver si el adjudicatario canceló la operación o si el resultado es RESULT_OK De actividades infantiles.

3. Acuerdo de citación

Finalmente, todo lo que tiene que hacer es apetecer a esta nueva variable registrada, que es simpleContractRegistration En el fragmento de hacia lo alto. Continúe la citación como cualquier método habitual. Todas las entradas que defina en el entendimiento se pasarán como parámetros de seguridad de tipos en la citación al método.

Y mira.no más onActivityResult() ahora mismo.Puede utilizar esta función fácilmente a través de su propia personalización Activity o FragmentClass, será un código muy íntegro, organizado y reutilizable con parámetros de seguridad de tipos.


Ahora que sabe lo manejable que es utilizar la API de resultados de actividad y crear su propio entendimiento. Le alegrará mucho memorizar que Google ofrece algunos contratos predefinidos muy aperos.Estos pueden ser de ActivityResultContracts clase. Exploremos algunos ejemplos a continuación.

Capturar imagen: ActivityResultContracts.TakePicture ()

Puede capturar imágenes fácilmente desde la cámara sin preocuparse por la intención de los medios.


Preferir imagen – ActivityResultContracts.GetContent

De esta modo, no solo puede optar imágenes, sino que además puede optar otros archivos de su dispositivo. Debe proporcionar el mimeType del archivo requerido en la aplicación.


Ahora, este es mi preferido. Conmemoración que tuve que escribir 100 líneas de código para solicitar múltiples permisos para manejar procesos muy complejos. Cuando no hay una API de resultados activa, la he cubierto en detalle en este artículo.

La API de resultados de actividad proporciona dos métodos: RequestPermission con RequestMultiplePermissions . Los dos nombres son exactamente iguales. Este es un código de muestra simple.


He creado un plan de demostración simple con algunos contratos de muestra como se explica en este artículo en el repositorio de Github a continuación. Puedes explorar más y usarlo.

Ahora, resuman. En este artículo, discutimos algunos de los temas tradicionales. onActivityResult() Método. Luego, aprendimos la nueva API de resultados de actividad. Luego, creamos un entendimiento de muestra para ver cómo funcionan juntas las diferentes partes. Finalmente, vimos algunos contratos preestablecidos, como captura de imágenes, selección de imágenes, procesamiento de permisos, etc.

Por zaguero, no olvide suscribirse a mi boletín para obtener más tutoriales y consejos sobre el progreso de Android directamente en su bandeja de entrada.


Gracias Roberto Orgiu Revise y proporcione comentarios sobre esta publicación🙌


Wajahat Karim Titulado de NUST Islamabad, es un desarrollador móvil experimentado, colaborador activo de código amplio y coautor de los dos libros «Unity Learning Android Intent and Mastering Android Game Development». En su tiempo escapado, le gusta producirse tiempo con su clan, realizar experimentos de codificación, escribir muchas cosas (principalmente en blogs y medios) y es un colaborador apasionado del código amplio. En junio de 2018, una de sus bibliotecas se convirtió en la número uno en Github Trending. Su biblioteca tiene aproximadamente de 2000 estrellas en Github y es utilizada por desarrolladores de todo el mundo en varias aplicaciones.SIGUELO Gorjeo Obtenga más actualizaciones sobre su trabajo en escritura, Android y código amplio con medio.

Por otra parte, si tiene alguna pregunta que pueda replicar, comuníquese con él a través de su sitio web wajahatkarim.com, el asunto es DEAR WAJAHAT.

LEER  una aplicación experimental para potenciar Motion Sense

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba