Intentos extras que faltan cuando comenzó la actividad

Dentro de un receptor de difusión quiero iniciar mi aplicación (Actividad) y pasar algunos datos.

Mi problema es que los extras no parecen trasladarse a la actividad. Estoy tratando de obtener los datos dentro de la función onNewIntent(Intent i) .

¿Algunas ideas?

Aquí está mi intento actual en BroadcastReceiver :

 Intent intSlider = new Intent(); intSlider.setClass(UAirship.shared().getApplicationContext(), SliderMenuActivity.class); intSlider.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intSlider.putExtra("action", ScreensEnum.Object); intSlider.putExtra("objectId", objectId); intSlider.putExtra("objectCode", objectCode); intSlider.putExtra("userId", userId); UAirship.shared().getApplicationContext().startActivity(intSlider); 

EDIT – Código añadido utilizado en onNewIntent () y onCreate ()

El código siguiente funciona muy bien en onCreate() cuando la aplicación no se está ejecutando actualmente. Para cuando la aplicación ya está ejecutando el mismo código no funciona (es decir, sin extras) de la función onNewIntent() .

 Intent intent = getIntent(); if(intent.hasExtra("objectId")) { loadDetail(intent.getStringExtra("objectId"), "2w232"); } 

El problema es el método getIntent() . Siempre devuelve la intención que inició la actividad, no la más reciente. Debe utilizar la intención que se pasó al método onNewIntent como un argumento.

Extracto de los documentos

Esto se denomina actividades que establecen launchMode en "singleTop" en su paquete o si un cliente utiliza el indicador FLAG_ACTIVITY_SINGLE_TOP al llamar a startActivity (Intent). En cualquier caso, cuando se vuelve a iniciar la actividad en la parte superior de la pila de actividades en lugar de una nueva instancia de la actividad que se está iniciando, se llamará onNewIntent () a la instancia existente con Intent que se utilizó para relanzar eso.

Una actividad siempre se detendrá antes de recibir una nueva intención, por lo que puede contar con onResume () que se llama después de este método.

Tenga en cuenta que getIntent () devuelve el intento original. Puede utilizar setIntent (Intent) para actualizarlo a este nuevo Intent.

Creo que el último párrafo explica su problema.

Debe establecer el indicador FLAG_ACTIVITY_SINGLE_TOP o establecer launchMode singleTop en el archivo de manifiesto.

Por supuesto, cuando se llama onNewIntent, no se utiliza getIntent, sino el Intent recibido como argumento. OnNewIntent será llamado cuando la instancia de actividad ya existe. Por ejemplo, si la última vez que presionó el botón de la pantalla de inicio.

Escribí una solución que funcionó para mí aquí: Propósito con extra viejo en onCreate () para singleTask Actividad

Puede almacenar la última intención recibida en una variable miembro (mLastIntent). A continuación, puede utilizar este miembro en su método onResume () para consultar los datos adicionales.

 private Intent mLastIntent; @Override protected void onNewIntent(Intent intent) { mLastIntent = intent; }; 
  • El concepto de una intención en Android?
  • Inicio de la actividad mediante la acción personalizada
  • Solicitar actividad predeterminada sin abrir realmente la actividad
  • Android Intent Clear No funciona
  • Haga clic en la notificación de Android mediante programación
  • Propósito de la página de detalles de la aplicación
  • Cómo eliminar la tarea de inicio automático en Android
  • ¿Cómo borrar correctamente los datos de intenciones de la actividad SingleTop?
  • Cuando los incendios de Android ACTION_BATTERY_LOW
  • Cómo transferir valor booleano entre las actividades en android?
  • FLAG_ACTIVITY_CLEAR_TOP y onActivityResult
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.