Cambios en la privacidad de Android Q: restricciones a los inicios de actividades en segundo plano

A partir de la versión Beta 5 de Android Q, este cambio tiene las siguientes propiedades:

  • Afecta a tu app si inicias actividades sin interacción del usuario.
  • Puedes reducir los efectos de este cambio usando actividades iniciadas por notificaciones.
  • Puedes inhabilitar restricciones al activar la opción para desarrolladores Permitir inicio de actividades en segundo plano.

Nos interesan tus comentarios. Informa los problemas que encuentres mientras usas esta función durante el programa de la versión Beta de Android Q.

Android Q controla cuándo las apps pueden iniciar actividades. Este cambio de comportamiento ayuda a minimizar las interrupciones para el usuario y a darle más control de lo que aparece en la pantalla.

Este cambio de comportamiento se aplica a todas las apps que se ejecutan en Android Q, incluso a aquellas que se orientan a Android 9 (nivel de API 28) o versiones anteriores. Además, si tu app se orienta a Android 9 o versiones anteriores y se instaló originalmente en un dispositivo que ejecuta Android 9 o versiones anteriores, el cambio de comportamiento se verá una vez que se actualice el dispositivo a Android Q.

Mientras tu app inicie actividades como resultado directo de la interacción del usuario, probablemente no se vea afectada por este cambio. De hecho, la mayoría de las apps no se ven afectadas por este cambio.

Condiciones que permiten inicios de actividades

Las apps que se ejecutan en Android Q pueden iniciar actividades solo cuando se cumple al menos una de las siguientes condiciones:

Si la app no cumple alguna de las condiciones anteriores, pero tiene una tarea existente en la pantalla Recientes, el sistema admite el inicio de las actividades de todos modos. Cuando una app de este tipo intenta iniciar una actividad nueva, el sistema coloca esa actividad por encima de la tarea existente de la app, pero no sale de la tarea visible actualmente. Cuando el usuario vuelve a la tarea de la app más tarde, el sistema inicia la actividad nueva en lugar de la actividad que, anteriormente, estaba por encima de la tarea de la app.

Mensajes de advertencia

Si tu app se ejecuta en la versión Beta más reciente de Android Q y trata de iniciar una actividad en segundo plano, la plataforma enviará un mensaje de advertencia al logcat y mostrará la siguiente notificación de advertencia:

    Background activity start from package-name blocked.
    

Las restricciones asociadas con iniciar actividades en segundo plano en Android Q son similares a cómo el sistema bloquea inicios de actividades después de que el dispositivo ingresó en un estado de pantalla fijada.

Cómo crear notificaciones para eventos urgentes

En prácticamente todos los casos, las apps que están en segundo plano deben crear notificaciones para suministrar información al usuario en vez de iniciar una actividad de forma directa.

En algunos casos, es posible que tu app necesite llamar la atención del usuario rápidamente, como cuando suena una alarma o entra una llamada. En esos casos, quizás hayas configurado previamente tu app para que inicie una actividad en segundo plano. A fin de repetir el mismo comportamiento en un dispositivo que ejecuta Android Q, sigue los pasos descritos en las siguientes secciones.

Cómo crear una notificación de prioridad alta

Cuando crees la notificación, asegúrate de incluir un título y un mensaje descriptivos. También puedes proporcionar un intent de pantalla completa.

En el siguiente fragmento de código, aparece un ejemplo de notificación:

    val fullScreenIntent = Intent(this, CallActivity::class.java)
    val fullScreenPendingIntent = PendingIntent.getActivity(this, 0,
        fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT)

    val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("Incoming call")
        .setContentText("(919) 555-1234")
        .setPriority(NotificationCompat.PRIORITY_HIGH)
        .setCategory(NotificationCompat.CATEGORY_CALL)

        // Use a full-screen intent only for the highest-priority alerts where you
        // have an associated activity that you would like to launch after the user
        // interacts with the notification. Also, if your app targets Android Q, you
        // need to request the USE_FULL_SCREEN_INTENT permission in order for the
        // platform to invoke this notification.
        .setFullScreenIntent(fullScreenPendingIntent, true)

    val incomingCallNotification = notificationBuilder.build()
    

Cómo mostrar la notificación al usuario

Cuando se muestre la notificación al usuario, en función de su contexto actual, este puede elegir aceptar o ignorar la alerta o el recordatorio de tu app. Por ejemplo, puede elegir aceptar o rechazar una llamada entrante.

Si tu notificación es constante, como una llamada entrante, asóciala con un servicio en segundo plano. El siguiente fragmento de código ejemplifica cómo mostrar una notificación asociada con un servicio en segundo plano:

    // Provide a unique integer for the "notificationId" of each notification.
    startForeground(notificationId, notification)
    

Beneficios de las notificaciones

Este sistema de alertas y recordatorios basados en notificaciones presentan distintas ventajas para los usuarios:

  • Cuando usa el dispositivo, el usuario recibe una notificación de atención que le permite contestar o rechazar la llamada, o bien ignorar la alarma. El usuario conserva el contexto actual y controla el contenido que ve en la pantalla.
  • La llamada entrante o la alarma respeta las reglas de No interrumpir que estableció el usuario. Por ejemplo, cuando está activado el modo No interrumpir, los usuarios pueden aceptar llamadas provenientes de determinados contactos o emisores recurrentes.
  • Cuando está apagada la pantalla del dispositivo, se inicia inmediatamente tu intent en pantalla completa.
  • En la pantalla de Configuración del dispositivo, el usuario puede ver qué apps han enviado notificaciones recientemente, incluso desde canales específicos. Desde esa pantalla, el usuario puede controlar sus preferencias de notificaciones.

Cómo inhabilitar el cambio de comportamiento

Te recomendamos que mantengas habilitado este cambio de comportamiento, ya que de esta manera podrás asegurarte de que los usuarios sigan interactuando con tu app como se espera cuando se instale Android Q en sus dispositivos.

Sin embargo, si este cambio impide que pruebes un flujo de trabajo principal en tu app, puedes inhabilitarlo durante la prueba realizando una de las siguientes tareas:

  • Navega a Configuración > Opciones para desarrolladores y habilita la opción Permitir inicio de actividades en segundo plano.
  • En una ventana terminal, ejecuta el siguiente comando:

        adb shell settings put global background_activity_starts_enabled 1