android - studio - Intención no detectada por actividad singleTop
notification overview android (1)
Tengo una actividad que se define como singleTop para que solo exista una instancia.
<activity
android:name=".MyMainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:launchMode="singleTop" android:multiprocess="true">
Configuré una intención de notificación con algunos datos, los incluyo en un PendingIntent y los envío al Administrador de notificaciones.
Intent notificationIntent = new Intent(context, MyMainActivity.class);
notificationIntent.setAction(MyMainActivity.CustomInternalMessageAction);
notificationIntent.putExtra(MyMainActivity.ReceiveTestMessage, rawMessageText);
...
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
mNotificationManager.notify(number, notification);
Si la actividad no se está ejecutando, la intención inicia la actividad a través de onCreate () como se esperaba.
Si la actividad se está ejecutando, pero en el estado detenido / no en primer plano (como al hacer clic en el botón de inicio), y se hace clic en la notificación, se llama a mi actividad onNewIntent () como se esperaba.
Sin embargo, si ya se llama a la Actividad cuando está en primer plano, entonces no se llama a onNewIntent ().
¿Cómo puedo configurar esta notificación para que mi SingleTop Activity reciba la intención, cuando está en el estado de pausa / detención (y también funciona en los otros casos que mencioné). Estoy pensando que hay una bandera para establecer en mi notificación objeto subyacente, pero las funciones de las banderas no son realmente claras para el caso de actividades singleTop.
Si su aplicación está compuesta por más de una actividad, las actividades singleTop
deben definirse también como singleTop
si desea recibir una onNewIntent()
a onNewIntent()
cuando esa actividad está activa.
Supongamos que la actividad principal es A
y se define como singleTop
y a partir de ahí comienza la actividad B
no definida como singleTop
. Si ahora selecciona una notificación que llama a su aplicación, la aplicación comenzará en la actividad B
pero no se llama a onNewIntent()
.
También puede anular este comportamiento agregando el indicador Intent.FLAG_ACTIVITY_CLEAR_TOP
que elimina la actividad B
de la pila y la Actividad A
recibirá la llamada onNewIntent()
.