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)
.
- Cómo decidir de qué actividad venimos?
- No es un error de clase incluido Android Studio
- Detección de la aplicación de destino al enviar un intento
- Intención de recibir notificación sobre el evento de conexión BLE en el periférico Android
- Intentando abrir una carpeta específica en android utilizando la intención
¿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"); }
- Pasar datos de un fragmento a otro
- Amplíe el tiempo de grabación de vídeo en Google Glass
- Android Intent para HTTP MP3 stream en HTC Incredible
- Escuchar el acceso a la ubicación desactivar / activar en la configuración
- IntentReceiverLeaked usando AdMob
- ¿Es posible ocultar una aplicación particular del usuario?
- Android contenido activitynotfoundexception no activity found to handle intent - al intentar ir a url
- Compruebe la conexión a Internet de INTENT
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