2016-04-04 13 views
1

Ich muss meine App jedes Mal starten, wenn der Benutzer eine NFC-Transaktion mit Host-basierter Kartenemulation (HCE) startet.Auf HCE (Host-based Card Emulation) -Ereignis achten

Ich muss die Interaktion nicht verwalten. Ich brauche keine Daten vom Reader oder vom NFC-Emulator. Ich habe keine Kontrolle über die Apps, die den Dienst nutzen. Ich muss nur wissen, ob das Telefon in der Nähe eines NFC-Lesers war.

Gibt es eine einfache Möglichkeit, wie für ein generisches Systemereignis oder eine Benachrichtigung zu hören, ohne andere Anwendungen zu stören?

Antwort

1

Nein, Android sendet keine Benachrichtigung wie "hey, es gibt eine App, die gerade über HCE aktiviert wurde". Daher können Sie ein solches Ereignis nicht in Ihrer App abrufen. Insbesondere ist es nicht möglich zu überwachen, ob eine vorhandene HCE-App (die nicht unter Ihrer Kontrolle steht) auf Ihrem Gerät über HCE aktiviert wurde.

Sie können Ihren eigenen HCE-Dienst erstellen (registriert für Ihre spezifischen Anwendungs-AIDs). Dieser HCE-Dienst könnte dann eine Aktivität starten, wenn er eine Transaktion empfängt (siehe auch How can I send message from HostApduService to an activity?):

public class MyHostApduService extends HostApduService { 
    @Override 
    public byte[] processCommandApdu(byte[] apdu, Bundle extras) { 
     if ((apdu[1] == (byte)0xA4) && (apdu[2] == (byte)0x04)) { 
      // SELECT by AID 
      Intent intent = new Intent(this, MyActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 

      return new byte[]{ (byte)0x90, (byte)0x00 } 
     } else { 
      return new byte[]{ (byte)0x6D, (byte)0x00 } 
     } 
    } 
}