Notificación para poner Actividad en primer plano sólo si está en segundo plano

Estoy tratando de hacer una aplicación similar a la aplicación nativa de alarma. Por lo tanto, este es el resultado ideal que estoy buscando. AlarmGoOffActivity recibe una intención pendiente, se dispara y muestra la alarma con los botones de snooze y dismiss, que he logrado. Tiene que ejecutarse como una sola instancia en todo momento. Y la instancia debe mover primer plano / fondo con la ayuda de los botones de inicio / retroceso y un icono de notificación (la notificación se libera al mismo tiempo que la alarma)

Pero, a partir del código que he escrito, puedo

1) Notificación y alarma de la exhibición. Cuando se hace clic en la notificación, no importa dónde esté (primer plano o fondo), se pone en primer plano.

2) Cuando la actividad se pone en primer plano, una pantalla blanca junto con la barra de acción se muestra, antes de la pantalla de alarma real.

Esto es lo que tengo que hacer

1) Cuando el usuario comprueba la alarma y presiona la pantalla de inicio o el botón Atrás y la actividad entra en segundo plano, necesito llevarla adelante con la ayuda de la notificación . 2) Sin embargo, si la actividad ya está en primer plano y se hace clic en el icono de notificación, no debería suceder nada.

Si puedes sugerir lo que necesito cambiar en este código para que funcione, eso sería genial.

AndroidManifest.xml

<activity android:name="com.alarm.productive.justalarm.Activities.AlarmGoOffActivity" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="portrait"> </activity> 

Parte de notificación de AlarmGoOffActivity.java

  NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.clock_logo) .setContentTitle(utilFunctions.toCamelCase(currentAlarmInView.getName())) .setContentText("Snooze or Dismiss Alarm"); Intent resultIntent = new Intent(context, AlarmGoOffActivity.class); resultIntent.putExtra(DBHelper.COLUMN_ID,currentAlarmInView.getId()); if(isSnooze){ resultIntent.putExtra(DBHelper.TASK_TITLE,"snooze"); } resultIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); stackBuilder.addParentStack(AlarmGoOffActivity.class); stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent( 1001, PendingIntent.FLAG_UPDATE_CURRENT ); mBuilder.setContentIntent(resultPendingIntent); mNotificationManager = (NotificationManager)context. getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(currentAlarmInView.getId(), mBuilder.build()); 

No es necesario utilizar TaskStackBuilder porque su tarea contiene sólo 1 Actividad. El uso de TaskStackBuilder hará que su actividad se reinicie, que no es lo que desea.

No es necesario utilizar Intent.FLAG_ACTIVITY_REORDER_TO_FRONT . Este indicador se utiliza para reordenar las actividades dentro de una tarea . Su tarea contiene sólo una Actividad, por lo que reordenarla al frente es inútil ya que ya está en el frente (de la tarea).

Intent.FLAG_ACTIVITY_NEW_TASK utilizar Intent.FLAG_ACTIVITY_NEW_TASK para iniciar la Actividad en una nueva tarea (si la Actividad no se está ejecutando en una tarea existente), o simplemente traer una tarea existente al primer plano (si ya se está ejecutando) .

Cree su notificación como esta en su lugar:

 NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.clock_logo) .setContentTitle(utilFunctions.toCamelCase(currentAlarmInView.getName())) .setContentText("Snooze or Dismiss Alarm"); Intent resultIntent = new Intent(context, AlarmGoOffActivity.class); resultIntent.putExtra(DBHelper.COLUMN_ID,currentAlarmInView.getId()); if (isSnooze){ resultIntent.putExtra(DBHelper.TASK_TITLE,"snooze"); } // Setting this flag ensures that the task will be brought forward if // it is in the background, but nothing will happen if it is already // in the foreground resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 1001, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT ); mBuilder.setContentIntent(resultPendingIntent); 
  • Android Studio: notificación de sonido sobre el éxito de la compilación
  • Ocultar la barra de progreso del área de notificación en android cuando se completa el 100%
  • GCM defaultSenderID
  • Iniciar y detener una notificación del receptor de emisión
  • Android Detener la notificación de brindis por programación?
  • Notificación enviada al usuario en un momento específico Android
  • Servicio de accesibilidad de Android detecta notificación
  • NotificationCompat.setStyle () no puede obtener Notification.MediaStyle
  • Android: ¿Cómo puedo incluir un sonido de notificación utilizando un recurso de sonido?
  • Mostrar una alerta o una vista al recibir una notificación
  • ¿Hay alguna manera de detectar si la barra de notificación ha sido borrada?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.