¿Puede una app Android reaccionar a una etiqueta sin enseñar pantalla?
Del todo no. Android entrega una etiqueta arrancando una actividad, así que siempre hay una, y el teléfono busca etiquetas solo mientras está desbloqueado. Lo más parecido al silencio es una actividad que no dibuja nada y se termina a sí misma antes de que la reanuden, un caso para el que la plataforma ofrece un tema.
Una etiqueta arranca siempre una actividad
La referencia de Tag describe un solo destino para una etiqueta descubierta: una única actividad, arrancada con startActivity. En ese camino no aparece ningún servicio, receptor ni trabajo programado.
El modo lector y el despacho en primer plano no cambian eso. Los dos necesitan una actividad en primer plano, así que sirven a una aplicación que ya está abierta, no a una que reacciona desde el fondo.
Una actividad que no dibuja nada
Android trae un tema para este caso. La referencia de R.style describe Theme.NoDisplay como el tema de las actividades que no muestran interfaz, porque se terminan a sí mismas antes de que las reanuden.
Ese momento es la restricción. El trabajo tiene que caber antes de que la actividad fuera reanudada, lo que descarta un intercambio largo con la etiqueta y encaja con el contenido que llegó con el intent.
El contenido suele llegar con él. La guía del marco de trabajo NFC hace obligatorio el extra EXTRA_NDEF_MESSAGES en ACTION_NDEF_DISCOVERED, así que los mensajes ya analizados están ahí sin una lectura más.
Cualquier cosa más larga pertenece a un componente hecho para el trabajo de fondo: la actividad lee el mensaje, entrega el trabajo y se termina.
Lo que sigue limitándolo
El teléfono tiene que estar mirando. La guía del marco de trabajo NFC dice que los dispositivos Android suelen buscar etiquetas mientras la pantalla está desbloqueada, así que un teléfono bloqueado en un bolsillo no reacciona a nada, por callada que sea la actividad.
La etiqueta se oye aunque no aparezca nada. La plataforma toca su sonido de descubrimiento, y la marca que lo calla pertenece al modo lector, que necesita una actividad visible.
La aplicación tiene que ser elegible. Desde Android 17, dice la documentación, los intents NFC ya no se despachan a una aplicación en estado detenido, nunca lanzada o parada a la fuerza, y desde Android 16 se pueden rechazar los intents de etiqueta aplicación por aplicación.
Los enlaces web son un caso aparte. Desde Android 16 una etiqueta que contiene un enlace http o https va a ACTION_VIEW, y desde Android 17 espera a que alguien actúe sobre un aviso, así que una reacción callada a un enlace web no está ofrecida en absoluto.
Cuándo una pantalla visible es mejor
Un toque es una pregunta, y el silencio es una respuesta ambigua. No se distingue una acción que corrió de una etiqueta que no se leyó, y el toque siguiente, hecho como reintento, ejecuta la acción dos veces.
Así que confirma, aunque sea brevemente, con un aviso o un mensaje corto. Una reacción del todo callada encaja con acciones cuyo efecto se ve en otra parte, como una luz que se enciende.
Donde la acción ya vive en una aplicación de rutinas, esa aplicación se ocupa de esto por ti, como describe la página de las rutinas en Android.
Preguntas frecuentes
¿Puede un servicio leer etiquetas en segundo plano?
Ninguna vía documentada lo permite. El despacho arranca una actividad, y el modo lector y el despacho en primer plano necesitan las dos una en primer plano.
¿Funciona con la pantalla apagada?
Normalmente no. La documentación dice que los dispositivos buscan etiquetas mientras la pantalla está desbloqueada, y los fabricantes pueden diferir, así que hay que probarlo en cada modelo.
¿La aplicación recibirá etiquetas si nunca la han abierto?
Desde Android 17 no. La documentación dice que los intents NFC no se despachan a una aplicación en estado detenido, lo que incluye una que nunca han lanzado.
¿Se puede quitar el sonido de descubrimiento?
Solo en modo lector, con FLAG_READER_NO_PLATFORM_SOUNDS, y el modo lector necesita una actividad visible. Una actividad callada lo es en pantalla, no al oído.