Sé que hay varias preguntas de este tipo, pero probé todas y todavía no funciona.
Ok, para mi aplicación; Tengo una actividad. En esta actividad, hay 4 pestañas, y la cuarta contiene una lista y un botón de grabación. Cuando estoy presionando grabar, hay un escucha de GPS que comienza. Después de obtener un nuevo valor de gps, lo introduce en la lista.
¡Esto funciona hasta ahora!
Si hago clic en el botón de inicio, todavía funciona, si lo presiono mucho, entonces. Se reanuda esa actividad con la pestaña específica abierta y la lista todavía contiene los elementos de lista y el oyente GPS sigue activo.
¡Esto también funciona bien!
Ahora quería agregar una notificación, que muestra el recuento de valores gps de la lista como .number. En cada nueva señal gps, actualiza el icono de notificación con el nuevo número. Esto no es un problema, pero la acción de hacer clic en la notificación arruina totalmente mi aplicación.Actividad de currículum de notificaciones
El código real se ve así:
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);
}
Así, el updateNotify() es llamado en una nueva señal de GPS. Y el callNotify() es el primero, antes de que comience el oyente gps. Y, sí, el notifyNumber/2 fue mi intención, porque trabajo con ese número aún más.
Si lo compilo de esta manera y hago clic en Notificación, se abre una NUEVA tabactividad en la primera pestaña. Si hago clic atrás, recibo muchos errores (la base de datos sigue abierta, los nullpointers y demás). Creo que porque comienza una nueva tabactividad y la otra todavía está abierta, porque puedo ver que el oyente GPS todavía está funcionando.
Entonces, lo que quiero es que pueda hacer lo siguiente: Abro mi aplicación, voy a la tabactividad, abro la pestaña 4, hago clic en grabar. Si hago clic atrás, debería ocultar la aplicación, también, si solo hago clic en el botón de inicio. Pero hay una notificación. Si hago clic en esa, solo debería mostrar la actividad oculta nuevamente y eso es todo. Entonces, ¿qué estoy haciendo mal allí? Pensé, las banderas FLAG_ACTIVITY_CLEAR_TOP y FLAG_ACTIVITY_SINGLE_TOP deberían resolver el problema?
Bueno, en realidad sé, por qué está saltando en la primera pestaña. La Tabactivity comienza usualmente en la primera pestaña, pero la cuarta pestaña tiene esa lista de gps. Entonces, para mí, lógicamente, está abriendo la tabactividad dos veces. Porque los datos iniciales de la lista y cosas no se cargan en ese momento. Entonces, ¿las banderas están equivocadas? No lo entiendo de alguna manera ... –
Oh, espera ... parece que funciona, si solo uso FLAG_ACTIVITY_SINGLE_TOP y no ambos. Ok, si ese fue el error, no entiendo por completo los documentos. ¡Lo siento! –