¿Cómo puedo pasar valores entre Actividades en Android?

Esta es la navegación de mi aplicación:

Activity1 llama a Activity2Activity2.finish() , a la llamada Activity3Activity3.finish()

Cuando Activity3 finaliza, llama al método onResume de Activity1 . ¿Ahora cómo puedo pasar un valor de Activity3 a Activity1 ?

Umesh muestra una buena técnica, pero creo que quieres la dirección opuesta.

Paso 1

Al comenzar las actividades 2 y 3, use startActivityForResult . Esto le permite manejar el resultado en la actividad de llamada.

 startActivityForResult(MY_REQUEST_ID); 

Paso 2

En las actividades 2 y 3, llame a setResult(int, Intent) para devolver un valor:

 Intent resultData = new Intent(); resultData.putExtra("valueName", "valueData"); setResult(Activity.RESULT_OK, resultData); finish(); 

Paso 3

En su actividad de llamada, implemente onActivityResult y obtenga los datos:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == MY_REQUEST_ID) { if (resultCode == RESULT_OK) { String myValue = data.getStringExtra("valueName"); // use 'myValue' return value here } } } 

Editar:

Técnica n. ° 2

Sí, también puede usar el estado global de la aplicación al agregar una clase a su aplicación que extiende la Application , consulte esta respuesta de StackOverflow

Use la identificación de la sesión para la actividad de registro en la intención que está utilizando para comenzar la actividad:

 Intent intent = new Intent(getBaseContext(), SignoutActivity.class); intent.putExtra("EXTRA_SESSION_ID", sessionId); startActivity(intent) 

Ver este tutorial

¿Por qué molestarse en seguir ese tipo de estructura … si tres vuelven a uno? Simplemente envíe un bash con sus datos de tres a uno y trátelo en consecuencia.

Enviar un Intento de la actividad 3 a 1 requeriría un disparador como un botón o quizás el método de ciclo de vida onStop para enviarlo. Es mejor que el resultado se envíe automáticamente con el método setResult.

También hay otra técnica, puede llamar al startActivity(new Intent(getApplicationContext(),Activity1.class)) junto con la clase Bundle para transferir datos de activity3 a activity1.

En Android, es posible ejecutar otra aplicación de un nombre de paquete específico, pasándole un argumento .

 public static void launchApp(Context context, String packageName) { Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName); if(intent == null) { intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)); } intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(Intent.EXTRA_TEXT, "*argument to send*"); context.startActivity(intent); } 

El siguiente código se puede usar para recuperar el argumento en la aplicación de destino.

 public static String getArgument(Activity activity) { return activity.getIntent().getStringExtra(Intent.EXTRA_TEXT); } 

Solo se necesita una referencia a la Actividad, esto es útil en la Unidad donde está desordenada para la Actividad de la subclase.