Un'applicazione Android può reagire a un tag senza mostrare uno schermo?
Non del tutto. Android consegna un tag avviando un'attività, quindi ce n'è sempre una, e il telefono cerca tag solo mentre è sbloccato. La cosa più vicina al silenzio è un'attività che non disegna nulla e si chiude da sé prima di essere ripresa, un caso per cui la piattaforma offre un tema.
Un tag avvia sempre un'attività
Il riferimento di Tag descrive una destinazione sola per un tag rilevato: un'attività singola, avviata con startActivity. In quel percorso non compare alcun servizio, ricevitore o lavoro pianificato.
Il modo lettore e lo smistamento in primo piano non cambiano la cosa. Entrambi hanno bisogno di un'attività in primo piano, quindi servono un'applicazione che è già aperta, non una che reagisce dal fondo.
Un'attività che non disegna nulla
Android fornisce un tema per questo caso. Il riferimento di R.style descrive Theme.NoDisplay come il tema delle attività che non mostrano un'interfaccia, perché si chiudono da sé prima di essere riprese.
È quel tempismo il vincolo. Il lavoro deve starci prima che l'attività verrebbe ripresa, il che esclude uno scambio lungo con il tag e si addice al contenuto arrivato con l'Intent.
Il contenuto di solito arriva davvero con esso. La guida alle basi dell'NFC rende l'extra EXTRA_NDEF_MESSAGES obbligatorio su ACTION_NDEF_DISCOVERED, quindi i messaggi già analizzati sono lì senza un'altra lettura.
Tutto quello che dura di più appartiene a un componente fatto per il lavoro di fondo: l'attività legge il messaggio, passa il lavoro, e si chiude.
Quello che la limita ancora
Il telefono deve stare a guardare. La guida alle basi dell'NFC dice che i dispositivi Android di solito cercano tag mentre lo schermo è sbloccato, quindi un telefono bloccato in tasca non reagisce a niente, per quanto silenziosa sia l'attività.
Chi usa il telefono sente il tag anche quando non compare nulla. La piattaforma emette il suo suono di rilevamento, e il contrassegno che lo zittisce appartiene al modo lettore, che ha bisogno di un'attività visibile.
L'applicazione deve essere ammissibile. Da Android 17, la documentazione dice che gli Intent NFC non vengono più smistati a un'applicazione in stato arrestato, mai avviata da chi usa il telefono o arrestata a forza, e da Android 16 si possono rifiutare gli Intent di tag applicazione per applicazione.
I collegamenti web sono un caso a parte. Da Android 16 un tag che porta un collegamento http o https va ad ACTION_VIEW, e da Android 17 aspetta che chi usa il telefono tocchi una notifica, quindi una reazione silenziosa a un collegamento web non è proprio fra le offerte.
Quando uno schermo visibile è meglio
Un tocco è una domanda, e il silenzio è una risposta ambigua. Chi usa il telefono non distingue un'azione che è partita da un tag che non si è lasciato leggere, e il tocco successivo, inteso come un secondo tentativo, esegue l'azione due volte.
Quindi conferma, anche brevemente, con una notifica o un messaggio corto. Una reazione del tutto silenziosa si addice alle azioni il cui effetto si vede altrove, come una luce che si accende.
Dove l'azione vive già in un'applicazione di routine, è quella a occuparsene per te, come descrive la pagina delle routine su Android.
Domande frequenti
Un servizio può leggere i tag dal fondo?
Nessun percorso documentato lo consente. Lo smistamento avvia un'attività, e sia il modo lettore sia lo smistamento in primo piano ne esigono una in primo piano.
Funziona a schermo spento?
Di solito no. La documentazione dice che i dispositivi cercano tag mentre lo schermo è sbloccato, e i costruttori possono differire, quindi va provato su ogni modello.
L'applicazione riceve i tag se non è mai stata aperta?
Non da Android 17. La documentazione dice che gli Intent NFC non vengono smistati a un'applicazione in stato arrestato, il che comprende quella che non è mai stata avviata.
Si può spegnere il suono di rilevamento?
Solo nel modo lettore, con FLAG_READER_NO_PLATFORM_SOUNDS, e il modo lettore ha bisogno di un'attività visibile. Un'attività silenziosa è silenziosa sullo schermo, non all'orecchio.