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; }; 
  • ¿Hay alguna manera de detectar que una aplicación ha sido detenida por la fuerza en Android
  • Cómo detectar el estado de sincronización automática cambiado a través del receptor de difusión
  • Pasar datos de un fragmento a otro
  • Android: ¿puede obtener código nativo la intención de difusión del sistema android?
  • Permitir que el usuario seleccione cámara o galería para la imagen
  • Android: Radio de red desactivada antes del evento ACTION_SHUTDOWN. Orden de cambios modificada en ICS
  • Usando intentos para pasar datos entre actividades en android
  • Inicio de una aplicación de Android desde el navegador
  • Cierre actividad de otra actividad a través de una intención
  • ¿Cómo liberar el recurso de micrófono cuando otra aplicación de Android lo necesita?
  • ¿Cómo detectar las aplicaciones de Android que pueden manejar la acción de intención solicitada?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.