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: eliminar el botón de acción de la notificación
  • Ancho de notificación de Android
  • ¿Cómo agregar un botón a las notificaciones en android?
  • Android: recibe todas las notificaciones por código
  • Procesos eliminados por el sistema Android: ¿se eliminan las notificaciones en curso?
  • Android-Notification: hacer que el texto del ticker permanezca más tiempo
  • Opcionalmente, iniciar actividades y utilizar notificaciones de servicios en Android. Sólo lanzar o notificar si una determinada aplicación está presente
  • Desplazamiento del texto del cuerpo en la notificación de Android
  • Ocultar la barra de progreso del área de notificación en android cuando se completa el 100%
  • Cómo utilizar un mapa de bits como un icono de notificación
  • Tamaño del icono de notificación en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.