Synchronous startActivityForResult – Esperando que la actividad se complete

Tengo una aplicación donde estoy lanzando una nueva Actividad, y necesito tener el resultado de la actividad antes de proceder.

Me doy cuenta de que startActivityForResult es asincrónico / no bloqueador, y que puedo obtener el resultado de la actividad en la devolución de llamada onActivityResult.

Así que supongo que lo que estoy buscando es la mejor manera de esperar a que la actividad vuelva … Algo como esto tal vez? ¿O hay un mejor camino?

Actividad Lanzador Función:

public String ActivityLauncher() { //Set up Intent startActivityForResult(intent, 1); while (mIsActivityDone == false) { Thread.Sleep(250); } //Continue with processing String data = "<Data from Activity"> return data; } 

Llamar de vuelta:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { //Pull out the data mIsActivityDone = true; } 

Los datos deben ser devueltos a una función de llamada de nivel superior – es por eso que necesito esperar el resultado en la función ActivityLauncher.

¡Gracias!

Esto bloqueará el hilo de la interfaz de usuario para que no se ejecute otra actividad. Yo utilizaría algún tipo de clase de devolución de llamada proporcionada por la función de nivel superior, en este tipo de situación y llamar a su función de devolución de llamada en onActivityResult

Si puedes iniciar estas actividades desde un nuevo hilo, entonces Android tiene una solución para ti. Puede utilizar Instrumentación. ¿Por qué necesita un nuevo hilo? Debido a que startActivitySync comprobará si está siendo invocado en un subproceso principal. Si su hilo principal entonces lanzará una excepción.

La instrumentación le permite monitorear una actividad. Puede supervisar esta actividad de forma bloqueada o no bloqueante.

 IntentFilter intF = new IntentFilter("ACTIVITY.THAT.YOU.WANT.TO.LAUNCH"); Instrumentation instrumentation = new Instrumentation(); Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(intF, null, true); Intent i = new Intent("ACTIVITY.THAT.YOU.WANT.TO.LAUNCH"); instrumentation.startActivitySync(i); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.