Saltar al contenido
Idioma: ES

¿Funciona Host Card Emulation con la pantalla apagada?

Depende de la versión de Android y de un ajuste del aparato. Hasta Android 9 no responde nada con la pantalla apagada. Desde Android 12 un servicio puede poner requireDeviceScreenOn a falso. Y mientras Secure NFC está activo, desde Android 10, ningún emulador de tarjeta está disponible con la pantalla apagada.

Versión por versión

La guía de Android sobre la emulación de tarjeta responde a esto por versiones, y las respuestas difieren lo bastante como para que una sola frase fuera falsa en alguna parte.

En Android 9 y anteriores, el controlador y el procesador de aplicaciones están apagados cuando la pantalla lo está, así que no responde ningún servicio; desde la pantalla de bloqueo sí responden, salvo que el servicio pida un desbloqueo. Desde Android 10, el ajuste Secure NFC cambia la pregunta: mientras está activo, ningún emulador de tarjeta, de host o fuera de host, está disponible con la pantalla apagada, y un servicio de host no puede funcionar desde la pantalla de bloqueo declare lo que declare; mientras está inactivo, las aplicaciones fuera de host siguen disponibles con la pantalla apagada. isSecureNfcSupported informa de si el aparato tiene siquiera el ajuste.

Desde Android 12, una aplicación que apunte a esa versión o posterior puede poner requireDeviceScreenOn a falso y responder con la pantalla apagada. Desde Android 15, una aplicación de cartera por defecto que active el modo Observe invierte a la vez el comportamiento del desbloqueo y el de la pantalla apagada, porque es ella quien decide cuándo puede seguir adelante una transacción.

Las dos declaraciones

Las dos viven en el XML que registra los identificadores, en el elemento host-apdu-service. requireDeviceUnlock vale falso por defecto, lo que quiere decir que el servicio se invoca incluso en un teléfono bloqueado. Puesto a verdadero, un toque que lleve al servicio hace que Android pida desbloquear, y luego volver a acercar el teléfono, ya que hubo que moverlo para desbloquearlo.

requireDeviceScreenOn es la más reciente, y es el falso lo que deja a un pago responder con la pantalla apagada desde Android 12. Ninguno de los dos atributos se aplica a un servicio fuera de host: el procesador principal no participa en ese intercambio, así que no puede retener al elemento seguro.

Lo que cambió el modo Observe

El modo Observe, desde Android 15, deja que el aparato mire los bucles de sondeo sin permitir ninguna transacción. Un servicio lo activa con setObserveModeEnabled(true), y la pila observa entonces en vez de hacer la transacción, que es como una cartera puede esperar a quien usa el teléfono antes de responder nada.

Lo que el servicio observa está filtrado. Los filtros registrados para un servicio emparejan una trama de sondeo exactamente o por patrón, y las tramas emparejadas llegan a processPollingFrames(), donde la aplicación puede prepararse o autenticar a quien usa el teléfono; las tramas de un lector que sondea con tramas normalizadas van al servicio preferido en primer plano, o a quien tenga el papel de cartera. Una trama lleva además una medida de la intensidad del campo propia del fabricante, que se lee con getVendorSpecificGain.

Salir del modo Observe es la señal de que la aplicación está lista: setObserveModeEnabled(false), o autoTransact en un filtro para que lo haga una trama emparejada. Un servicio puede pedir arrancar en modo Observe siempre que sea el servicio de pago preferido, mediante shouldDefaultToObserveMode en el manifiesto o setShouldDefaultToObserveModeForService.

Diseñar para un teléfono bloqueado

Prueba los estados en vez de las versiones. Pantalla encendida y desbloqueada, pantalla encendida y bloqueada, pantalla apagada, cada uno con Secure NFC activo e inactivo, es una matriz corta que responde a lo que se va a encontrar quien usa el teléfono, y el teléfono en un bolsillo es el estado que más demostraciones se saltan. La página de la pantalla apagada cubre el mismo límite desde el lado de quien lo usa.

Después decide a qué se parece el fallo. Un servicio que no puede responder mientras está bloqueado deja a la persona delante de un lector que no dice nada, así que la aplicación tiene que explicar el estado en algún sitio donde vaya a mirar, cosa que el aviso de desbloqueo de la guía solo hace cuando el servicio ha pedido el desbloqueo.

Y si se puede cambiar un lector, cámbialo con el teléfono: la guía anima a trabajar con los fabricantes de lectores para que sus bucles de sondeo lleven un patrón identificable, que es lo que permite a un servicio reconocer su propio terminal antes de decidir si hace la transacción.

Preguntas frecuentes

¿Puede responder una tarjeta emulada con la pantalla apagada?

Desde Android 12, si el servicio pone requireDeviceScreenOn a falso y Secure NFC está inactivo. Hasta Android 9 el controlador se apaga con la pantalla.

¿Qué cambia Secure NFC?

Mientras está activo, ningún emulador de tarjeta está disponible con la pantalla apagada, y un servicio de host no puede funcionar desde la pantalla de bloqueo declare lo que declare.

¿Qué hace requireDeviceUnlock?

Puesto a verdadero, un toque pide desbloquear y luego volver a acercar el teléfono. Por defecto vale falso, así que el servicio responde en un teléfono bloqueado.

¿Se aplican estos ajustes a un elemento seguro?

No. Ninguno de los dos atributos se aplica a un servicio fuera de host, ya que el procesador principal no forma parte de ese intercambio.