Kann eine Android-Anwendung auf einen Tag reagieren, ohne einen Bildschirm zu zeigen?
Nicht ganz. Android stellt einen Tag zu, indem es eine Aktivität startet, es gibt also immer eine, und das Telefon sucht nur nach Tags, solange es entsperrt ist. Dem Lautlosen am nächsten kommt eine Aktivität, die nichts zeichnet und sich beendet, bevor sie fortgesetzt wird.
Ein Tag startet immer eine Aktivität
Die Referenz zu Tag beschreibt ein einziges Ziel für einen erkannten Tag: eine einzelne Aktivität, mit startActivity gestartet. Kein Dienst, kein Empfänger und kein Auftrag taucht auf diesem Weg auf.
Lesemodus und Vordergrund-Zustellung ändern daran nichts. Beide brauchen eine Aktivität im Vordergrund, dienen also einer Anwendung, die bereits offen ist, nicht einer, die aus dem Hintergrund reagiert.
Eine Aktivität, die nichts zeichnet
Android liefert für diesen Fall ein Thema mit. Die Referenz zu R.style beschreibt Theme.NoDisplay als das Thema für Aktivitäten, die keine Oberfläche zeigen, weil sie sich beenden, bevor sie fortgesetzt werden.
Dieses Zeitfenster ist die Einschränkung. Die Arbeit muss hineinpassen, bevor die Aktivität fortgesetzt würde, was einen langen Austausch mit dem Tag ausschließt und zu Inhalt passt, der mit der Absicht angekommen ist.
Inhalt kommt meist mit. Der Leitfaden zu den NFC-Grundlagen macht den Zusatz EXTRA_NDEF_MESSAGES bei ACTION_NDEF_DISCOVERED verbindlich, sodass die zerlegten Nachrichten ohne ein weiteres Lesen da sind.
Alles Längere gehört einem Bestandteil, der für Arbeit im Hintergrund gemacht ist: die Aktivität liest die Nachricht, übergibt die Arbeit und beendet sich.
Was sie trotzdem begrenzt
Das Telefon muss suchen. Der Leitfaden zu den NFC-Grundlagen sagt, dass Android-Geräte gewöhnlich nach Tags suchen, solange der Bildschirm entsperrt ist, sodass ein gesperrtes Telefon in einer Tasche auf nichts reagiert, wie leise die Aktivität auch sein mag.
Die Nutzerin oder der Nutzer hört den Tag, auch wenn nichts erscheint. Die Plattform spielt ihren Erkennungston, und der Schalter, der ihn verstummen lässt, gehört zum Lesemodus, der eine sichtbare Aktivität braucht.
Die Anwendung muss in Frage kommen. Ab Android 17, sagt die Dokumentation, werden NFC-Absichten nicht mehr an eine Anwendung im angehaltenen Zustand zugestellt, nie gestartet oder zwangsweise beendet, und ab Android 16 können Nutzerinnen und Nutzer Tag-Absichten anwendungsweise ablehnen.
Weblinks sind ein eigener Fall. Ab Android 16 geht ein Tag mit einem http- oder https-Link an ACTION_VIEW, und ab Android 17 wartet er auf eine Handlung an einer Mitteilung, sodass eine lautlose Reaktion auf einen Weblink gar nicht angeboten wird.
Wann ein sichtbarer Bildschirm besser ist
Ein Antippen ist eine Frage, und Schweigen ist eine mehrdeutige Antwort. Die Nutzerin oder der Nutzer kann eine ausgeführte Aktion nicht von einem Tag unterscheiden, der nicht gelesen wurde, und das nächste Antippen, als zweiter Versuch gemeint, führt die Aktion zweimal aus.
Bestätigen Sie also, und sei es kurz, mit einer Mitteilung oder einer knappen Meldung. Eine vollständig lautlose Reaktion passt zu Aktionen, deren Wirkung sich anderswo zeigt, etwa zu einem Licht, das angeht.
Wo die Aktion schon in einer Routine-Anwendung lebt, übernimmt diese das für Sie, wie die Seite zu den Android-Routinen beschreibt.
Häufige Fragen
Kann ein Dienst Tags im Hintergrund lesen?
Kein dokumentierter Weg erlaubt das. Die Zustellung startet eine Aktivität, und Lesemodus wie Vordergrund-Zustellung verlangen beide eine im Vordergrund.
Funktioniert es bei ausgeschaltetem Bildschirm?
Meist nicht. Die Dokumentation sagt, dass Geräte nach Tags suchen, solange der Bildschirm entsperrt ist, und Hersteller können abweichen, also muss es je Modell geprüft werden.
Bekommt die Anwendung Tags, wenn sie nie geöffnet wurde?
Ab Android 17 nicht. Die Dokumentation sagt, dass NFC-Absichten nicht an eine Anwendung im angehaltenen Zustand zugestellt werden, wozu eine nie gestartete gehört.
Lässt sich der Erkennungston abschalten?
Nur im Lesemodus, mit FLAG_READER_NO_PLATFORM_SOUNDS, und der Lesemodus braucht eine sichtbare Aktivität. Eine leise Aktivität ist auf dem Bildschirm leise, nicht für das Ohr.