Damit Ihre App (tatsächlich Aktivität) beim Scannen eines Tags gestartet wird, müssen Sie Ihrem App-Manifest einen entsprechenden Intent-Filter hinzufügen.
Wenn Sie Ihre App starten nur für jeden Tag wollen, sind die TECH_DISCOVERED
Intent-Filter, was Sie verwenden wollen:
<activity ...>
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
</activity>
Diese Intent-Filter eine zusätzliche XML-Ressourcendatei erfordern, die die Tag-Technologien definiert, die Ihre App sollte zuhören (Notieren Sie sich den Tag außerhalb des Intent-Filters).Die zur Verfügung stehenden Technologien sind die im Namespace android.nfc.tech.*
, zur Zeit:
android.nfc.tech.IsoDep
android.nfc.tech.MifareClassic
android.nfc.tech.MifareUltralight
android.nfc.tech.Ndef
android.nfc.tech.NdefFormatable
android.nfc.tech.NfcA
android.nfc.tech.NfcB
android.nfc.tech.NfcBarcode
android.nfc.tech.NfcF
android.nfc.tech.NfcV
nur jeden Tag zu entdecken, würden Sie eine XML-Datei wie folgt aus (erstellen Sie die Datei als xml/nfc_tech_filter.xml
) erstellen:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.NfcA</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcB</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcBarcode</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcF</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcV</tech>
</tech-list>
</resources>
Beachten Sie, dass Sie muss nicht notwendigerweise die anderen Technologien wie
0 einbeziehen
IsoDep
impliziert entweder NfcA
oder NfcB
,
MifareClassic
impliziert NfcA
,
MifareUltralight
NfcA
impliziert, und
Ndef
/NdefFormatable
implizieren entweder NfcA
, NfcB
, NfcF
oder NfcV
.
Der obige Intent-Filter wird ausgelöst, wenn es keine andere App mit einem besseren Filter für übereinstimmende Absichten gibt. Eine bessere Übereinstimmung wäre eine Übereinstimmung für den Datentyp, der für das Tag verwendet wird. Wenn Ihr Tag beispielsweise eine URL enthält (in einer NDEF-Nachricht gekapselt), erhält eine App, die über URLs ausgelöst wird, Vorrang vor Ihrer App. Wenn Sie die für Ihre Tags verwendeten Datentypen kennen, können Sie auch einen Filter für diese Datentypen hinzufügen. Zum Beispiel passen einfach alle "http: //" und "https: //" URL, könnten Sie verwenden:
<activity ...>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
</intent-filter>
</activity>
Und falls Ihr Tag enthält den MIME-Typ „application/vnd.com.example “, könnten Sie verwenden:
<activity ...>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/vnd.com.example" />
</intent-filter>
</activity>
Sie sogar mehrere Absicht Filter für eine Aktivität kombinieren könnte:
<activity ...>
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/vnd.com.example" />
</intent-filter>
</activity>
Schließlich gibt es noch eine NFC-bezogenen Intent-Filter:
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Sie würden jedoch normalerweise nicht diesen Intent-Filter im Manifest verwenden. Es ist nur als Fallback gedacht und wird nur dann ausgelöst, wenn keine andere App die Technologie oder die Daten des gescannten Tags auslöst. Es ist also nicht notwendig, diesen Intent-Filter von Ihnen bereits für den oben genannten TECH_DISCOVERED
Intent-Filter hinzuzufügen.
Funktioniert es, wenn ich alle Anwendungen ausschalten, die auf meinem Telefon laufen? Es sieht so aus, als ob ich mein Telefon neu starte und NFC berühre, wenn das Telefon eingeschaltet ist, dann App. wird gestartet werden. Ist es möglich? – Jame
Ja, ich habe es vorher getestet, Sie müssen nur Ihre NFC einschalten. – user3406222
Vielen Dank – Jame