El software actualizable del Documento de definición de compatibilidad de Android (CDD) requiere que los dispositivos implementen la clase SystemUpdatePolicy
. SystemUpdatePolicy
permite que la app del propietario del dispositivo (DO), si está presente, controle la instalación de las actualizaciones del sistema.
Notificar a los propietarios de los dispositivos
El cliente inalámbrico (OTA) debe notificar a las apps del propietario del dispositivo sobre las actualizaciones OTA entrantes con una API del sistema. El cliente OTA también debe incluir una marca de tiempo de cuando la actualización OTA estuvo disponible por primera vez. Los clientes OTA pueden llamar a DevicePolicyManager.notifyPendingSystemUpdate(long updateReceivedTime, boolean isSecurityPatch)
para notificar a las apps de propietario del dispositivo. Si el cliente OTA no sabe si una actualización es un parche de seguridad, puede volver a usar DevicePolicyManager.notifyPendingSystemUpdate(long updateReceivedTime)
.
Si no hay una actualización disponible en ese momento, el cliente OTA lo informa configurando el argumento updateReceivedTime
como -1
.
Recomendamos enviar notificaciones cada vez que el cliente inalámbrico sondea el servidor inalámbrico o cuando se envía una actualización inalámbrica al cliente. También puedes enviar notificaciones con mayor frecuencia.
Política de actualización del sistema
Android 9 mejora la capacidad de los propietarios de dispositivos para controlar las actualizaciones, ya que les permite posponer las actualizaciones inalámbricas por hasta 90 días. Esta función se enfoca en soluciones de dispositivos dedicados (antes llamadas COSU) y permite que los propietarios detengan la versión del SO que se ejecuta en los dispositivos durante períodos críticos, como las vacaciones.
Para cumplir con el CDD, el cliente de OTA debe implementar políticas de comportamiento. La función DO puede establecer las siguientes políticas, que los subsistemas de actualización del sistema del dispositivo deben respetar:
Los propietarios de dispositivos también pueden configurar períodos sin actualización (en Android 9 o versiones posteriores) que bloquean la versión del SO durante períodos críticos, como feriados y otros momentos de mayor actividad. El sistema no instala actualizaciones OTA durante un período de actualización. Te recomendamos que uses SystemUpdatePolicy.InstallationOption
(consulta la siguiente sección). Sin embargo, el cliente inalámbrico también puede llamar a SystemUpdatePolicy.getFreezePeriods()
para verificar si el dispositivo se encuentra en un período sin actualización.
Implementa opciones de instalación
Android 9 presenta una @SystemApi, SystemUpdatePolicy.InstallationOption
, que está diseñada para los clientes de actualización del sistema.
SystemUpdatePolicy.InstallationOption
funciona como una clase de wrapper para las políticas y los períodos de inactividad. Una opción de instalación les indica a los clientes cómo actuar ante las actualizaciones entrantes del sistema y durante cuánto tiempo es válida esa acción, según la política de actualización del sistema actual o cualquier período sin actualización que se pueda establecer. Una opción de instalación puede ser una de las siguientes:
-
TYPE_INSTALL_AUTOMATIC
: Las actualizaciones entrantes del sistema se instalan de inmediato y sin intervención del usuario en cuanto están disponibles. El dispositivo se reiniciará automáticamente. -
TYPE_POSTPONE
: Las actualizaciones del sistema entrantes se pueden retrasar hasta por 30 días. Los usuarios no pueden instalar actualizaciones de forma manual. Los fabricantes de dispositivos pueden elegir si desean bloquear o no los parches de seguridad. -
TYPE_PAUSE
: Las actualizaciones del sistema entrantes se pueden retrasar de forma indefinida hasta nuevo aviso. Los usuarios no pueden instalar una actualización de forma manual.TYPE_PAUSE
retrasa todas las actualizaciones, incluidos los parches de seguridad.
Los clientes de actualización del sistema pueden consultar SystemUpdatePolicy.InstallationOption
con SystemUpdatePolicy.getInstallationOptionAt(long when)
, en el que when representa el momento en que se consulta la opción de instalación en cantidad de milisegundos desde la época. Con el método SystemUpdatePolicy.getInstallationOptionAt(long when)
, los clientes de actualización del sistema pueden actuar sobre la opción que se muestra hasta que transcurra el tiempo efectivo. Después de que caduca la opción que se muestra, el cliente puede realizar otra consulta, con una marca de tiempo nueva, para la opción más reciente.
El cliente de actualización del sistema debe escuchar las transmisiones de DevicePolicyManager.ACTION_SYSTEM_UPDATE_POLICY_CHANGED
en caso de que se actualice toda la política.
Valida la política TYPE_PAUSE
Puedes validar de forma manual que la opción TYPE_PAUSE
funcione en un sistema inalámbrico.
La política TYPE_PAUSE está vigente
Para validar que una política TYPE_PAUSE
funcione, haz lo siguiente:
-
Establece una política automática y especifica
TYPE_PAUSE
. - Mientras el reloj del sistema esté en el período de pausa, envía una actualización OTA.
- Verifica que el dispositivo no reciba la actualización inalámbrica y que el usuario no pueda instalarla de forma manual.
- Si el dispositivo es un dispositivo A/B, reinícialo y verifica que el reinicio no haya activado una instalación automática de la actualización.
La política TYPE_PAUSE está vencida
Para validar que una política TYPE_PAUSE
vencida está funcionando, haz lo siguiente:
-
Establece una política automática y especifica
TYPE_PAUSE
. - Mientras el reloj del sistema esté en el período de pausa, envía una actualización OTA.
- Espera a que venza el período de pausa.
- Verifica que el dispositivo se reinicie automáticamente y que se realice la actualización OTA después del reinicio.