Estoy interceptando mensajes SMS con algo de información en ellos. Luego en mi SmsListener estoy creando una notificación para mostrar en la barra de estado. Entonces, cuando el usuario hace clic en una notificación Quiero¿Cómo llevar una actividad al primer plano (o crear si no existe)?
- Llevar MainActivity a primer plano (Si no existe dicha actividad, sin embargo, debe crearse)
- Pass para que los datos de los sms
- realizar algunas ui cambios basándose en estos datos en este MainActivity
Mi actividad se define como
<activity
android:name=".MainActivity"
android:screenOrientation="sensor"
android:label="@string/app_name"
android:launchMode="singleTask"/>
La actividad se puso en marcha como
Intent i = new Intent();
i.setClass(context, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
También en mi actividad he anulado método onNewActivity
@Override
public void onNewIntent(Intent intent){
super.onNewIntent(intent);
// I have data from broadcast in intent variable passed to this activity
processDataFromBroadcast(intent);
}
Funciona bien si el MainActivity ya existe pero si no existe MainActivity se inicia sin embargo onNewIntent no era llamado
Luego traté de invocar processDataFromBroadcast desde onCreate: processDataFromBroadcast(getIntent())
. Los datos de la primera vez se pasan correctamente de mi transmisión a la actividad. Sin embargo, si MainActivity se envía a segundo plano y se vuelve a poner en primer plano, se llama a onCreate o onNewIntent y processDataFromBroadcast se ejecuta nuevamente con intento enviado por broadcast y así mi MainActivity se actualiza con datos de difusión cada vez que la aplicación se pone en primer plano - este último no es deseado, ¿cómo puedo hacer que mi actividad olvide esta intención después del primer manejo? Here is sample application.
Gracias por la respuesta. Sin embargo, vea mis actualizaciones a la pregunta. – Solvek
La actividad tiene el método getIntent() para recuperar el intento que desencadenó la actividad. Si solo desea procesar el intento en la primera instanciación, puede hacerlo desde onCreate(). Como ya sabrá, onCreate() solo se invoca cuando la actividad aún no está en la memoria. – rogerkk
Hmm, lo siento, veo que no leí su actualización correctamente ya que ya ha intentado esto. Estoy haciendo exactamente lo que estás haciendo en una de mis aplicaciones, y la única diferencia que puedo ver ahora es que estoy usando el modo de inicio singleInstance, y he configurado android: alwaysRetainTaskState en true. Mi onCreate() definitivamente no se activa al volver a abrir la actividad. – rogerkk