2016-05-12 16 views
2

Ich habe zwei Apps auf zwei Android-Geräten, ähnlich wie CardEmulation und CardReader aus den Proben für NFC.NFC-Karte Emulation mit geschlossenen Leser-Anwendung

Ich möchte Daten von der Host Card Emulation App, die auf einem Android-Gerät ausgeführt wird, an die Reader-Anwendung senden, die auf dem zweiten Android-Gerät ausgeführt wird. Dies funktioniert, wenn beide Apps im Vordergrund geöffnet sind.

Aber wenn ich die Reader-Anwendung schließe, kann ich keine Daten mehr an sie senden. Wenn die beiden Telefone zusammengehalten werden, aktivieren sie stattdessen die Übertragung von Strahlen. Allerdings möchte ich, dass das Reader-Handy die Reader-App automatisch startet, wenn die beiden Telefone zusammengehalten werden.

So Frage ist:

  1. Kann ich Daten aus der HCE App senden, so dass der Leser eine TECH_DISCOVERED Absicht empfängt, wenn das Gerät nah an sie gestellt werden? (Wir möchten nicht, dass die zusätzliche Akzeptanz für den Beam-Modus klickt.)

  2. Wenn das nicht möglich ist, kann die HostApduService Daten senden, so dass der Leser eine NDEF_DISCOVERED Absicht erhält?

+0

Beide Seiten (Karte und Leser) sind Android-Geräte, richtig? –

+0

@MichaelRoland ja. –

Antwort

4

Leider ist das nicht möglich. Aufgrund der Art und Weise, wie der Android NFC-Stack die Abfrage für andere NFC-Geräte (Peer-to-Peer-Modus und NFC-Tags) implementiert, ist es nicht möglich, eine Reader-Anwendung auf einem Android-Gerät über eine Host-basierte Kartenemulation (HCE) zu starten ein anderes Android-Gerät.

Der Android NFC-Stack fragt standardmäßig sowohl NFC-Tags als auch NFC-Peer-to-Peer-Geräte ab. Wenn zwei Android-Geräte zusammengehalten werden, kommunizieren sie automatisch über den NFC Peer-to-Peer-Modus und nicht über Lese-/Schreibmodus + Kartenemulationsmodus.

Als Konsequenz kann das "Lesegerät" das auf dem zweiten Gerät laufende HostApduService nicht erkennen. Daher kann ein Android-Gerät ein NFC-Tag (das eine NDEF-Nachricht enthält) nicht emulieren, das eine Anwendung auslöst (die nach einer NDEF_DISCOVERED Absicht oder sogar einer TECH_DISCOVERED oder TAG_DISCOVERED Absicht filtert) auf einem zweiten Android-Gerät.

Die einzige Möglichkeit zur Kommunikation zwischen einem Android-Gerät (im Lese-/Schreibmodus) und einer HCE-Anwendung (HostApduService) auf einem zweiten Android-Gerät ist die Verwendung der reader mode API). Dadurch wird das Peer-to-Peer-Polling deaktiviert und das Android-Gerät des Lesers kann den Kartenemulationsmodus des anderen Geräts erkennen. Um diese API zu verwenden, muss Ihre Anwendung jedoch bereits eine Vordergrundaktivität auf dem Lesegerät ausführen.

Beachten Sie, dass die Deaktivierung von Android Beam (über die App "Einstellungen") den Peer-to-Peer-Modus nicht deaktiviert. Das ändert also nichts.