Evitar una nueva instancia de actividad después de hacer clic en la notificación

Comportamiento de la aplicación (no deseada)

  1. Se inicia la aplicación, se pone algún texto en el cuadro de texto y se crea la notificación a través de la acción del botón.
  2. El usuario "hace clic" en el botón de inicio, la aplicación está "minimizada", la notificación está disponible en la barra
  3. El usuario selecciona la notificación y la aplicación se "maximiza"

PERO – en lugar de la instancia original, se inicia nueva instancia (por ejemplo, en la instancia más reciente falta el texto original, cuando la última instancia se cierra sigue siendo la instancia original con el texto original).

El código del método de notificación

Context context = getApplicationContext(); CharSequence contentTitle = "someText1"; CharSequence contentText = "someText2"; Intent notifyIntent = new Intent(Intent.ACTION_MAIN); notifyIntent.setClass(getApplicationContext(), RadioStream.class); PendingIntent intent = PendingIntent.getActivity(RadioStream.this, 0, notifyIntent, 0); notifyDetails.setLatestEventInfo(context, contentTitle, contentText, intent); mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails); 

También tengo en el archivo xml de manifiesto siguiente etiqueta

 android:launchMode="singleTask" 

Pero sigue siendo el mismo … El principal problema es la inicialización doble / triple de la aplicación, sé que hay otros medios para preservar los valores en las aplicaciones reanudadas. También es necesario que las aplicaciones permanezcan funcionando en segundo plano como la funcionalidad principal es el streaming de radio por Internet.

¿Qué falta en el código? ¿Qué tipo de información de mi lado falta para solucionar el problema?

¡Gracias!

Dav

Lo que usted refiere como "aplicación" es muy probablemente una actividad. Para evitar que se vuelva a colocar en el

 android:launchMode="singleTop" 

Para tener algún código de fondo en ejecución, es necesario darse cuenta de que como servicio

Otra opción es usar setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP) en su Intent .

Añada este indicador a las propiedades de su actividad.

Android: launchMode = "singleInstance"

Puede establecer PendingIntent.FLAG_CANCEL_CURRENT en PendingIntent:

 PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

Si la actividad ya existe, ¡La nueva cancelará y no actualizará la anterior! Esto funciona para mí!

Reimplementada como servicio – todo funciona como se esperaba

Utilicé el ejemplo de GCM como código base para un proyecto personal y me enfrenté al mismo problema descrito en la parte superior. GCM Ejemplo: https://github.com/googlesamples/google-services/tree/master/android/gcm/app/src/main/java/gcm/play

Encontré una solución combinándola con respuestas:

1) De la respuesta de @ognian, agregando al manifiesto de la aplicación en la sección de la aplicación:

Android: launchMode = "singleTop"

 <application android:allowBackup="true" android:icon="@mipmap/logo" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" **android:launchMode="singleInstance">** 

2) De @CommonsWare estableciendo setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)

 private void sendNotification(String message) { Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT); 

Está trabajando para mí usando la combinación abajo.

1) añadir el modo de lanzamiento en el archivo Manifest android: launchMode = "singleInstance"

2) establezca setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP) mientras crea la intención.

Intención = nueva intención (esto, StartUpActivity.class); Intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

en lugar de :

 notifyIntent.setClass(getApplicationContext(), RadioStream.class); PendingIntent intent = PendingIntent.getActivity(RadioStream.this, 0, notifyIntent, 0); 

Simplemente utilizar estas líneas, que le ayudará,

 notifyIntent = new Intent(); PendingIntent intent= PendingIntent.getActivity(RadioStream.this, 0, notifyIntent, 0); 
  • GCM 3.0 - gcm no muestra automáticamente la notificación con el parámetro de notificación
  • Firebase que envía varias notificaciones push en lugar de apilar o reemplazar
  • ¿Cómo agregar sonido a la notificación?
  • Notificaciones de Remote View de Android
  • ¿Cómo mostrar la notificación del servicio de fondo?
  • NotificationCompat no se puede resolver a un tipo
  • Notificación de color de texto en Galaxy S 2.3.3
  • Notificación sin intención pendiente
  • Notificación de Android en una fecha específica
  • Inicie correctamente la Actividad de la Notificación independientemente del estado de la aplicación
  • Notificación llevar la aplicación al frente sin actividad de cambio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.