android - una - porque mi celular no registra las llamadas entrantes
Intención de reanudar una actividad previamente en pausa(llamada desde una notificación) (5)
Estoy desarrollando una aplicación que muestra una notificación al usuario. El objetivo de la notificación es facilitar al usuario el retorno a la actividad cuando el usuario está en otra actividad. Estoy usando este código en mi aplicación para crear y mostrar la notificación.
notification = new Notification(R.drawable.icon,
"Notify",
System.currentTimeMillis());
notification.setLatestEventInfo(this, "App name",
"App message",
PendingIntent.getActivity(
this, 0,
new Intent(this, Main.class),
PendingIntent.FLAG_CANCEL_CURRENT));
notification.flags |= Notification.FLAG_ONGOING_EVENT;
nManager.notify(0, notification);
Pero cuando el usuario toca la notificación, se inicia una nueva instancia de la misma actividad, en lugar de la que el usuario estaba utilizando antes.
Creo que esto tiene algo que ver con PendingIntent pero no puedo encontrar la forma de hacer que Intent para reanudar una instancia de la actividad previamente detenida en lugar de crear una nueva instancia.
Gracias.
Al crear su PendingIntent, usted usa:
Main.this.getBaseContext ()
Debe usar el contexto de actividad predeterminado si desea volver a la misma actividad. Leer más aquí:
Android: ¿cuál es la diferencia entre los distintos métodos para obtener un contexto?
Aparte de la respuesta correcta de @Jimix, cambiaría el PendingIntent
de 0 a un valor distinto de cero como se comentó en otra answer . Por otro lado, hay un error conocido en versiones anteriores de Android que me llevó un par de horas desesperadas. La solución propuesta allí funcionó bien para que cancele el PendingIntent
antes de enviar la notificación:
if (Build.VERSION.SDK_INT == 19) {
getNotificationPendingIntent().cancel();
}
Descubrí cómo hacerlo. Agregué el siguiente código:
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
Ahora mi código se ve así:
notification = new Notification(R.drawable.icon,
"Notify", System.currentTimeMillis());
notification.setLatestEventInfo(this, "App name",
"App message", PendingIntent.getActivity(this,
0, new Intent(this, Main.class)
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP),
PendingIntent.FLAG_CANCEL_CURRENT));
notification.flags |= Notification.FLAG_ONGOING_EVENT;
Esto me ayuda a android:launchMode="singleInstance"
<activity
android:name="com.mosis.automatskidnevnik.MainActivity"
android:launchMode="singleInstance"
android:label="@string/app_name" >
...
Resolví el mismo problema configurando
android:launchMode="singleTask"