Evitar una nueva instancia de actividad después de hacer clic en la notificación
Comportamiento de la aplicación (no deseada)
- 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.
- El usuario "hace clic" en el botón de inicio, la aplicación está "minimizada", la notificación está disponible en la barra
- 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).
- Iniciar y detener una notificación del receptor de emisión
- Notificación regular no mostrará el botón Cerrar X en android
- Android: obtener un identificador único de notificación
- Comprobar si el usuario ha concedido NotificationListener acceso a mi aplicación
- ¿Son confiables las notificaciones push de Android?
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
- El LED de notificación de Android no utiliza mi color
- NotificationCompat.Builder falta el método build ()
- ¿Está FLAG_ONLY_ALERT_ONCE roto, o equivocado, o ambos?
- Android incorpora nueva línea en una notificación
- Android: Después de crear una nueva notificación, la más antigua se reemplaza
- Cómo reproducir un sonido de notificación de Android
- Notificación de estilo InboxStyle
- ¿Es posible agregar a los oyentes onclick a las vistas remotas en android
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);
- El margen predeterminado de FloatingActionButton no funciona en lollipop
- OpenID para aplicaciones de Android que requieren