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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top