Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Notificación para restaurar una tarea en lugar de una actividad específica?

Tengo un servicio de primer plano que mantiene una conexión abierta con el servidor, siempre y cuando el usuario está conectado a la aplicación. Esto es para que la conexión se mantiene viva y puede recibir mensajes directamente desde el servidor incluso cuando la aplicación ha sido enviada al fondo por el usuario presionando Inicio.

La aplicación tiene varias actividades, cualquiera de las cuales podría ser la activa cuando se envía al fondo.

  • Android: qué modo de audio debe configurarse para enviar la voz de recepción entre dispositivos
  • Error al compilar com.squareup.retrofit: converter-simplexml: 2.0.0-beta2
  • Activar / desactivar la conexión de datos en android mediante programación
  • Cómo restringir datos de proveedor de contenido entre aplicaciones
  • Módulo de importación de Android Studio Error de generación de Gradle
  • Por qué algunos receptores de radiodifusión sólo pueden registrarse a través de Code o AndroidManifest
  • Me gustaría permitir que el usuario haga clic en la notificación para restaurar la actividad actual. Entiendo cómo restaurar una actividad en particular, pero me pregunto si hay una manera de restaurar la última actividad en la que estaba el usuario? Por supuesto, podría hacer un seguimiento de la última, y ​​luego llamar desde la notificación de devolución de llamada, pero pensé que podría haber una manera en un nivel de tarea?

    Gracias por cualquier consejo que pueda ofrecer.

  • Conversión de fecha y hora simple de Java a la fecha
  • Android: hace referencia a la matriz de cadenas utilizando otra cadena con getIdentifier () y getStringArray
  • Cómo cambiar el nombre de la aplicación en Launcher en android según el idioma seleccionado en Configuración de Teléfono?
  • Configurar la alarma de Android en un momento específico
  • ¿Cómo puedo reutilizar una clase interna en Java / Android?
  • ¿Cómo auto desinstalar una aplicación?
  • 5 Solutions collect form web for “¿Notificación para restaurar una tarea en lugar de una actividad específica?”

    Lo que necesitas es una simple actividad que no hace nada. Aquí hay un ejemplo:

    public class NotificationActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Now finish, which will drop the user in to the activity that was at the top // of the task stack finish(); } } 

    Configure su notificación para iniciar esta actividad. Asegúrese de que en el manifiesto la afinidad de tareas de esta actividad sea la misma que la afinidad de tareas de las otras actividades de su aplicación (por defecto, si no ha definido explícitamente android: taskAffinity ).

    Cuando el usuario selecciona esta notificación, si su aplicación se está ejecutando, se iniciará NotificationActivity en la parte superior de la actividad más alta en la tarea de la aplicación y esa tarea se llevará a primer plano. Cuando termine la NotificationActivity, simplemente devolverá al usuario a la actividad más alta de su aplicación (es decir: donde quiera que el usuario la dejó cuando entró en segundo plano).

    Esto no funcionará si su aplicación no se está ejecutando. Sin embargo, usted tiene 2 opciones para lidiar con eso:

    1. Asegúrese de que la notificación no esté presente en la barra de notificaciones cuando su aplicación no se está ejecutando.

    2. En el método onCreate () de NotificationActivity, compruebe si su aplicación se está ejecutando y si no está ejecutando la llamada startActivity () y ejecute su aplicación. Si hace esto, asegúrese de establecer el indicador Intent.FLAG_ACTIVITY_NEW_TASK al iniciar la aplicación para que la actividad raíz de la tarea no sea NotificationActivity.

    Funciona muy bien, gracias David! La clase siguiente comprueba si la aplicación ya se está ejecutando y si no, comienza antes de terminar (como sugirió David en la opción 2).

     public class NotificationActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // If this activity is the root activity of the task, the app is not running if (isTaskRoot()) { // Start the app before finishing Intent startAppIntent = new Intent(getApplicationContext(), MainActivity.class); startAppIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startAppIntent); } finish(); } } 

    Hay una solución más simple que no requiere la actividad adicional. Vea este post para más detalles. Básicamente, la notificación inicia la tarea (posiblemente existente) de la misma manera que se inicia cuando hace clic en el icono del lanzador mientras la aplicación está en segundo plano.

    Mi solución, que emula el comportamiento del lanzador (elevando la tarea al primer plano):

     Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setClassName(MyApplication.class.getPackage().getName(), MainActivity.class.getName()); 
     Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); 

    Esto funciona, no hay dudas sobre él, pero el problema es cuando usted establece su intención como ACTION_MAIN. Entonces usted no podrá fijar cualquier paquete a la intención. Quiero decir, sus datos primitivos no serán recibidos de la actividad objetivo porque ACTION_MAIN no puede contener ningún dato adicional.

    En lugar de esto, sólo puede configurar sus actividades como singleTask y llamar a su intención normalmente sin establecer ACTION_MAIN y recibir la intención del método onNewIntent () de la actividad de destino.

    Pero tenga en cuenta si llama, super.onNewIntent (intención); Entonces se creará una segunda instancia de la actividad. Simplemente no llame al método super.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.