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)
.
- Android Intent para HTTP MP3 stream en HTC Incredible
- API que detecta llamadas entrantes en android
- ¿Cómo borrar los datos de intención en Actividad después de abrirlos desde url?
- ¿Alguien por favor explique RESULT_FIRST_USER
- La eliminación de una entrada de un paquete (es decir, extras) no parece funcionar en combinación con el botón de retroceso
¿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"); }
- Actividad de superusuario no encontrada
- No se pudo encontrar la excepción de clase Android
- El constructor Intent (new View.OnClickListener () {}, Clase <DrinksTwitter>) no está definido
- Borrar actividad back stack
- Android.Share a las redes sociales
- ¿Cómo pasar datos de spinner de una actividad a otra?
- Cómo informar al usuario de que necesita instalar otra aplicación de la que dependa mi aplicación
- Abra el video de youtube en un momento específico con la intención de Android
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; };
- ¿Son la etiqueta y el icono mutuamente excluyentes en un tabHost TabSpec setIndicator?
- Motorola Bionic – tipo de entrada textPersonName y textCapWords no funcionan