Notificación reanudar la actividad
-
01-10-2019 - |
Pregunta
Lo sé, hay varias preguntas de este tipo, pero me trataron todos de la misma y todavía no funciona.
Ok, por mi aplicación; Tengo una actividad. En esta actividad, hay 4 más aquí, y el cuarto contenidos de un botón de grabación y la lista. Cuando estoy empujando registro, hay un oyente GPS que se inicia. Después de conseguir un nuevo valor GPS, lo empuja en la lista.
Esto funciona hasta ahora!
Si hago clic en el botón Inicio que todavía funciona, si LongPress entonces. Se reanuda la actividad que con la específica pestaña abierta y la lista todavía mantienen los ListItems y el GPS oyente está todavía activo.
Esto funciona muy bien también!
Ahora quería agregar una notificación, que muestra el recuento de los valores de los gps de la lista como .Number. En cada nueva señal GPS, se actualiza el icono de notificación con el nuevo número. Esto no es problema, pero la acción para hacer clic en la notificación totalmente los tornillos hasta mi solicitud.
Las miradas de código reales como esta:
public void callNotify(String text) {
notif = new Notification();
Intent contentIntent = new Intent(this, tabactivity.class);
contentIntent.putExtra("fid", this.specialvalue);
contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
notif.icon = R.drawable.icon;
notif.setLatestEventInfo(this, getString(R.string.app_name), text,
PendingIntent.getActivity(this.getBaseContext(), 0, contentIntent,
PendingIntent.FLAG_UPDATE_CURRENT));
notif.ledARGB = Color.RED;
notif.ledOnMS = 200;
notif.ledOffMS = 200;
notif.flags = Notification.FLAG_SHOW_LIGHTS
| Notification.FLAG_ONGOING_EVENT
| Notification.FLAG_ONLY_ALERT_ONCE;
notif.number = notifyNumber;
mNotificationManager.notify(notifyNumber, notif);
}
public void updateNotify(String text) {
notifyNumber++;
notif.number = (int) (notifyNumber / 2);
Intent contentIntent = new Intent(this, tabactivity.class);
contentIntent.putExtra("fid", this.specialvalue);
contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
notif.setLatestEventInfo(this, getString(R.string.app_name), text,
PendingIntent.getActivity(this.getBaseContext(), 0, contentIntent,
PendingIntent.FLAG_UPDATE_CURRENT));
mNotificationManager.cancel((notifyNumber - 2));
mNotificationManager.notify(notifyNumber, notif);
}
Por lo tanto, la updateNotify () se llama en una nueva señal de GPS. Y el callNotify () es la primera de ellas, antes de que comience el oyente GPS. Y, sí, la notifyNumber / 2 era mi intención, porque trabajo con ese número aún más.
Si compilo como este, y hacer clic en la notificación, se abre una nueva tabactivity en la primera pestaña. Si hago clic en ese entonces, tengo una gran cantidad de errores (base de datos está todavía abierta, nullpointers y esas cosas). Creo que ya que se inicia una nueva tabactivity y el otro está todavía abierto, porque puedo ver el gps oyente todavía está trabajando.
Por lo tanto, lo que quiero es, que puedo hacer lo siguiente: Abro la aplicación, vaya a la tabactivity, 4 pestaña abierta, haga clic en Registro. Si hago clic en ese entonces, se debe ocultar la aplicación, también, si basta con hacer clic en el botón Inicio. Pero hay una notificación. Si hago clic en que uno, que sólo debe mostrar la actividad oculta de nuevo y eso es todo. Por lo tanto, lo que estoy haciendo mal allí? Pensé, las banderas y FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_SINGLE_TOP podrían resolver el problema?
Solución
Lo que está sucediendo aquí es un poco confuso, así que tengan paciencia conmigo aquí.
FLAG_ACTIVITY_SINGLE_TOP
acuerdo con los documentos If set, the activity will not be launched if it is already running at the top of the history stack.
Así que si la actividad actual no es en la parte superior de la pila de la historia será relanzada.
FLAG_ACTIVITY_CLEAR_TOP
de nuevo de las docs If set, and the activity being launched is already running in the current task, then instead of launching a new instance of that activity, all of the other activities on top of it will be closed and this Intent will be delivered to the (now on top) old activity as a new Intent.
Por defecto, el TabActivity
siempre se abrirá a la pestaña 0, se puede utilizar setDefaultTab
a cambio de que a través de código. Cada pestaña en el TabHost es también un nuevo Intent
Si compilo como este, y clic en la notificación, se abre una nueva tabactivity en la primera pestaña. Si yo haga clic en ese entonces, consigo una gran cantidad de errores (Base de datos está todavía abierta, nullpointers y esas cosas).
Esto está sucediendo Pienso porque el Intent
actual es TAB4 (en realidad su # 3, 0,1,2,3) y su notificación es la educación de la tabactivity.class
. Dado que no es activo o en la parte superior de la pila, cada acto en la parte superior de la misma está cerrada, incluyendo TAB4.
Por lo tanto, lo que quiero es que me puedo hacer la siguiente: Abro la aplicación, vaya a la tabactivity, abierta ficha 4, haga clic en Registro. Si hago clic en ese entonces, se debe ocultar la aplicación, también, si tan sólo haga clic en el botón de inicio. Pero hay una notificación. Si hago clic en que uno, que sólo debe mostrar el oculto Acitivity otra vez y eso es todo. Y qué Que estoy haciendo mal allí? Pensé, la Banderas y FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_SINGLE_TOP debería resolver el problema?
Usted está confundiendo lo hacen las banderas y lo que sucede con las teclas home
y back
. Golpear home
ocultará su actividad y la notificación debería funcionar bien con esas banderas (una vez a solucionar el problema he mencionado anteriormente). Al llegar a back
embargo, Android finaliza el Activity
actual y se lo quita la pila. Como no hay nada debajo de ella, que se ven obligados a relanzamiento de cero cuando se presiona la notificación.