एनएफ़सी की बुनियादी बातें

इस दस्तावेज़ में, Android में किए जाने वाले एनएफ़सी से जुड़े बुनियादी टास्क के बारे में बताया गया है. इसमें, एनडीएफ़ मैसेज के तौर पर एनएफ़सी डेटा भेजने और पाने का तरीका बताया गया है. साथ ही, इन सुविधाओं के साथ काम करने वाले Android फ़्रेमवर्क एपीआई के बारे में भी बताया गया है. ज़्यादा बेहतर विषयों के बारे में जानने के लिए, बेहतर एनएफ़सी देखें. इसमें, एनडीएफ़ डेटा के अलावा अन्य डेटा के साथ काम करने के बारे में भी चर्चा की गई है.

एनएफ़सी टैग से NDEF डेटा पढ़ने की सुविधा, टैग डिस्पैच सिस्टम की मदद से मैनेज की जाती है. यह सिस्टम, ढूंढे गए एनएफ़सी टैग का विश्लेषण करता है, डेटा को सही कैटगरी में बांटता है, और उस कैटगरी के डेटा में दिलचस्पी रखने वाले ऐप्लिकेशन को शुरू करता है. स्कैन किए गए एनएफ़सी टैग को मैनेज करने वाला ऐप्लिकेशन, इंटेंट फ़िल्टर का एलान कर सकता है और डेटा को मैनेज करने का अनुरोध कर सकता है.

टैग डिस्पैच सिस्टम

आम तौर पर, Android डिवाइसों की स्क्रीन अनलॉक होने पर, वे एनएफ़सी टैग खोजते रहते हैं. ऐसा तब तक होता है, जब तक डिवाइस के सेटिंग मेन्यू में एनएफ़सी की सुविधा बंद नहीं की जाती. जब Android डिवाइस को कोई एनएफ़सी टैग मिलता है, तो सबसे सही गतिविधि को इंटेंट को मैनेज करना चाहिए. इसके लिए, उपयोगकर्ता से यह पूछने की ज़रूरत नहीं होती कि किस ऐप्लिकेशन का इस्तेमाल करना है. डिवाइस, एनएफ़सी टैग को बहुत कम रेंज में स्कैन करते हैं. इसलिए, हो सकता है कि उपयोगकर्ताओं को किसी गतिविधि को मैन्युअल तरीके से चुनने के लिए, डिवाइस को टैग से दूर ले जाना पड़े और कनेक्शन टूट जाए. आपको अपनी गतिविधि को सिर्फ़ उन एनएफ़सी टैग के लिए डिज़ाइन करना चाहिए जिनसे आपकी गतिविधि को फ़ायदा मिलता है. इससे, ऐक्टिविटी चुनने वाला टूल दिखने से रोका जा सकता है.

इस लक्ष्य को पूरा करने में आपकी मदद करने के लिए, Android एक खास टैग डिस्पैच सिस्टम उपलब्ध कराता है. यह स्कैन किए गए एनएफ़सी टैग का विश्लेषण करता है, उन्हें पार्स करता है, और स्कैन किए गए डेटा में दिलचस्पी रखने वाले ऐप्लिकेशन ढूंढने की कोशिश करता है. यह ऐसा इन तरीकों से करता है:

  1. एनएफ़सी टैग को पार्स करना और MIME टाइप या यूआरआई का पता लगाना, जो टैग में डेटा पेलोड की पहचान करता है.
  2. MIME टाइप या यूआरआई और पेलोड को इंटेंट में शामिल करना. पहले दो चरणों के बारे में एनएफ़सी टैग को एमआईएम टाइप और यूआरआई से कैसे मैप किया जाता है में बताया गया है.
  3. इंटेंट के आधार पर कोई गतिविधि शुरू करता है. इस बारे में ज़्यादा जानकारी के लिए, पढ़ें कि एनएफ़सी टैग को ऐप्लिकेशन पर कैसे भेजा जाता है.

एनएफ़सी टैग को MIME टाइप और यूआरआई से मैप करने का तरीका

एनएफ़सी ऐप्लिकेशन लिखने से पहले, यह समझना ज़रूरी है कि एनएफ़सी टैग के अलग-अलग टाइप क्या हैं, टैग डिस्पैच सिस्टम एनएफ़सी टैग को कैसे पार्स करता है, और एनडीएफ़ई मैसेज का पता चलने पर टैग डिस्पैच सिस्टम क्या खास काम करता है. एनएफ़सी टैग कई तरह की टेक्नोलॉजी में उपलब्ध होते हैं. साथ ही, इनमें कई तरीकों से डेटा डाला जा सकता है. Android में NDEF स्टैंडर्ड के लिए सबसे ज़्यादा सहायता मिलती है. इसे एनएफ़सी फ़ोरम तय करता है.

NDEF डेटा को एक मैसेज (NdefMessage) में पैकेज किया जाता है. इसमें एक या उससे ज़्यादा रिकॉर्ड (NdefRecord) होते हैं. आपको जिस तरह का रिकॉर्ड बनाना है उसके हिसाब से, हर NDEF रिकॉर्ड सही तरीके से बना होना चाहिए. Android, ऐसे अन्य टैग के साथ भी काम करता है जिनमें NDEF डेटा नहीं होता. इन टैग के साथ काम करने के लिए, android.nfc.tech पैकेज में मौजूद क्लास का इस्तेमाल करें. इन टेक्नोलॉजी के बारे में ज़्यादा जानने के लिए, बेहतर एनएफ़सी विषय देखें. इस तरह के अन्य टैग के साथ काम करने के लिए, टैग के साथ कम्यूनिकेट करने के लिए अपना प्रोटोकॉल स्टैक लिखना पड़ता है. इसलिए, हमारा सुझाव है कि जब भी हो सके, NDEF का इस्तेमाल करें. इससे, डेवलपमेंट आसान हो जाता है और Android डिवाइसों के लिए ज़्यादा से ज़्यादा सहायता मिलती है.

ध्यान दें: NDEF के सभी स्पेसिफ़िकेशन डाउनलोड करने के लिए, एनएफ़सी फ़ोरम के स्पेसिफ़िकेशन और ऐप्लिकेशन दस्तावेज़ साइट पर जाएं. साथ ही, NDEF रिकॉर्ड बनाने के उदाहरणों के लिए, सामान्य टाइप के NDEF रिकॉर्ड बनाना देखें.

अब आपके पास एनएफ़सी टैग के बारे में कुछ जानकारी है. इसलिए, यहां दिए गए सेक्शन में इस बारे में ज़्यादा जानकारी दी गई है कि Android, एनडीएफ़ फ़ॉर्मैट वाले टैग को कैसे मैनेज करता है. जब Android डिवाइस, NDEF फ़ॉर्मैट में डेटा वाले किसी एनएफ़सी टैग को स्कैन करता है, तो वह मैसेज को पार्स करता है और डेटा का MIME टाइप या यूआरआई की पहचान करने की कोशिश करता है. इसके लिए, सिस्टम NdefMessage में मौजूद पहला NdefRecord पढ़ता है, ताकि यह पता लगाया जा सके कि पूरे NDEF मैसेज को कैसे समझा जाए. किसी NDEF मैसेज में कई NDEF रिकॉर्ड हो सकते हैं. सही तरीके से बनाए गए NDEF मैसेज में, पहले NdefRecord में ये फ़ील्ड होते हैं:

तीन बिट का TNF (टाइप नेम फ़ॉर्मैट)
यह बताता है कि वैरिएबल लंबाई वाले फ़ील्ड को कैसे समझा जाए. मान्य वैल्यू के बारे में टेबल 1 में बताया गया है.
वैरिएबल लंबाई का टाइप
रिकॉर्ड के टाइप के बारे में बताता है. अगर TNF_WELL_KNOWN का इस्तेमाल किया जा रहा है, तो रिकॉर्ड टाइप की परिभाषा (RTD) बताने के लिए, इस फ़ील्ड का इस्तेमाल करें. आरटीडी की मान्य वैल्यू के बारे में टेबल 2 में बताया गया है.
वैरिएबल लंबाई वाला आईडी
रिकॉर्ड के लिए यूनीक आइडेंटिफ़ायर. इस फ़ील्ड का अक्सर इस्तेमाल नहीं किया जाता. हालांकि, अगर आपको किसी टैग की खास तौर पर पहचान करनी है, तो इसके लिए आईडी बनाया जा सकता है.
वैरिएबल लंबाई वाला पेलोड
असल डेटा पेलोड, जिसे आपको पढ़ना या सेव करना है. किसी एनडीएफ़ मैसेज में एक से ज़्यादा एनडीएफ़ रिकॉर्ड हो सकते हैं. इसलिए, यह न मानें कि पूरा पेलोड, एनडीएफ़ मैसेज के पहले एनडीएफ़ रिकॉर्ड में है.

टैग डिस्पैच सिस्टम, TNF और टाइप फ़ील्ड का इस्तेमाल करके, MIME टाइप या यूआरआई को NDEF मैसेज से मैप करने की कोशिश करता है. अगर यह प्रोसेस पूरी हो जाती है, तो वह जानकारी ACTION_NDEF_DISCOVERED इंटेंट के अंदर, असली पेलोड के साथ शामिल हो जाती है. हालांकि, कुछ मामलों में टैग डिस्पैच सिस्टम, पहले NDEF रिकॉर्ड के आधार पर डेटा टाइप का पता नहीं लगा पाता. ऐसा तब होता है, जब NDEF डेटा को MIME टाइप या यूआरआई पर मैप नहीं किया जा सकता या जब एनएफ़सी टैग में शुरू से ही NDEF डेटा मौजूद नहीं होता. ऐसे मामलों में, टैग की टेक्नोलॉजी और पेलोड की जानकारी वाले Tag ऑब्जेक्ट को ACTION_TECH_DISCOVERED इंटेंट में डाला जाता है.

टेबल 1 में बताया गया है कि टैग डिस्पैच सिस्टम, TNF और टाइप फ़ील्ड को MIME टाइप या यूआरआई से कैसे मैप करता है. इसमें यह भी बताया गया है कि किन TNF को MIME टाइप या यूआरआई से मैप नहीं किया जा सकता. ऐसे मामलों में, टैग डिस्पैच सिस्टम ACTION_TECH_DISCOVERED पर वापस आ जाता है.

उदाहरण के लिए, अगर टैग डिस्पैच सिस्टम को TNF_ABSOLUTE_URI टाइप का कोई रिकॉर्ड मिलता है, तो वह उस रिकॉर्ड के वैरिएबल लेंथ टाइप फ़ील्ड को यूआरआई में मैप करता है. टैग डिस्पैच सिस्टम, उस यूआरआई को ACTION_NDEF_DISCOVERED इंटेंट के डेटा फ़ील्ड में शामिल करता है. साथ ही, टैग के बारे में अन्य जानकारी भी शामिल करता है, जैसे कि पेलोड. वहीं दूसरी ओर, अगर उसे TNF_UNKNOWN टाइप का कोई रिकॉर्ड मिलता है, तो वह टैग की टेक्नोलॉजी को शामिल करने वाला इंटेंट बनाता है.

टेबल 1. इस्तेमाल किए जा सकने वाले TNF और उनकी मैपिंग

टाइप का नाम फ़ॉर्मैट (TNF) मैपिंग
TNF_ABSOLUTE_URI टाइप फ़ील्ड के आधार पर यूआरआई.
TNF_EMPTY यह ACTION_TECH_DISCOVERED पर वापस आ जाता है.
TNF_EXTERNAL_TYPE टाइप फ़ील्ड में मौजूद यूआरएन के आधार पर यूआरआई. URN को NDEF टाइप फ़ील्ड में, छोटे फ़ॉर्मैट में एन्कोड किया जाता है: <domain_name>:<service_name>. Android इसे इस फ़ॉर्मैट में यूआरआई पर मैप करता है: vnd.android.nfc://ext/<domain_name>:<service_name>.
TNF_MIME_MEDIA टाइप फ़ील्ड के आधार पर MIME टाइप.
TNF_UNCHANGED पहले रिकॉर्ड में अमान्य है, इसलिए यह वैल्यू फिर से ACTION_TECH_DISCOVERED पर सेट हो जाती है.
TNF_UNKNOWN यह ACTION_TECH_DISCOVERED पर वापस आ जाता है.
TNF_WELL_KNOWN MIME टाइप या यूआरआई, जो रिकॉर्ड टाइप डेफ़िनिशन (आरटीडी) के आधार पर तय होता है. इसे टाइप फ़ील्ड में सेट किया जाता है. उपलब्ध आरटीडी और उनकी मैपिंग के बारे में ज़्यादा जानकारी के लिए, टेबल 2 देखें.

टेबल 2. TNF_WELL_KNOWN और उनकी मैपिंग के लिए काम करने वाले आरटीडी

रिकॉर्ड टाइप डेफ़िनिशन (आरटीडी) मैपिंग
RTD_ALTERNATIVE_CARRIER यह ACTION_TECH_DISCOVERED पर वापस आ जाता है.
RTD_HANDOVER_CARRIER यह ACTION_TECH_DISCOVERED पर वापस आ जाता है.
RTD_HANDOVER_REQUEST यह ACTION_TECH_DISCOVERED पर वापस आ जाता है.
RTD_HANDOVER_SELECT ACTION_TECH_DISCOVERED पर वापस आ जाता है.
RTD_SMART_POSTER पेलोड को पार्स करने के आधार पर यूआरआई.
RTD_TEXT text/plain का MIME टाइप.
RTD_URI पेलोड के आधार पर यूआरआई.

एनएफ़सी टैग को ऐप्लिकेशन पर डिस्पैच करने का तरीका

जब टैग डिस्पैच सिस्टम, एनएफ़सी टैग और उसकी पहचान करने वाली जानकारी को शामिल करने वाला इंटेंट बना लेता है, तो वह इंटेंट को उस ऐप्लिकेशन को भेजता है जिसमें दिलचस्पी है. यह ऐप्लिकेशन, इंटेंट को फ़िल्टर करता है. अगर इंटेंट को एक से ज़्यादा ऐप्लिकेशन हैंडल कर सकते हैं, तो गतिविधि चुनने वाला टूल दिखता है, ताकि उपयोगकर्ता गतिविधि चुन सके. टैग डिस्पैच सिस्टम, तीन इंटेंट तय करता है. इन्हें सबसे ज़्यादा से लेकर सबसे कम प्राथमिकता के क्रम में रखा जाता है:

  1. ACTION_NDEF_DISCOVERED: इस इंटेंट का इस्तेमाल, किसी गतिविधि को शुरू करने के लिए किया जाता है. ऐसा तब होता है, जब किसी ऐसे टैग को स्कैन किया जाता है जिसमें एनडीएफ़ पेलोड मौजूद हो और वह पहचाने गए टाइप का हो. यह सबसे ज़्यादा प्राथमिकता वाला इंटेंट है. जब भी संभव हो, तो टैग डिस्पैच सिस्टम किसी भी दूसरे इंटेंट से पहले इस इंटेंट की मदद से गतिविधि शुरू करने की कोशिश करता है.

    ध्यान दें: Android 16 से, यूआरएल लिंक (जैसे, यूआरआई स्कीम "htttps://" या "http://") सेव करने वाले एनएफ़सी टैग को स्कैन करने पर, ACTION_NDEF_DISCOVERED इंटेंट के बजाय ACTION_VIEW इंटेंट ट्रिगर होगा.

  2. ACTION_TECH_DISCOVERED: अगर ACTION_NDEF_DISCOVERED के मकसद को मैनेज करने के लिए कोई गतिविधि रजिस्टर नहीं की जाती है, तो टैग डिस्पैच सिस्टम इस मकसद के साथ कोई ऐप्लिकेशन शुरू करने की कोशिश करता है. अगर स्कैन किए गए टैग में ऐसा एनडीएफ़ डेटा है जिसे एमआईएम टाइप या यूआरआई पर मैप नहीं किया जा सकता है या टैग में एनडीएफ़ डेटा नहीं है, लेकिन वह किसी टैग टेक्नोलॉजी का है, तो यह इंटेंट सीधे तौर पर शुरू हो जाता है. इसके लिए, ACTION_NDEF_DISCOVERED को शुरू करने की ज़रूरत नहीं होती.
  3. ACTION_TAG_DISCOVERED: यह इंटेंट तब शुरू होता है, जब कोई भी गतिविधि ACTION_NDEF_DISCOVERED या ACTION_TECH_DISCOVERED इंटेंट को मैनेज न करती हो.

टैग डिस्पैच सिस्टम इस तरह काम करता है:

  1. एनएफ़सी टैग (ACTION_NDEF_DISCOVERED या ACTION_TECH_DISCOVERED) को पार्स करते समय, टैग डिस्पैच सिस्टम ने जो इंटेंट बनाया था उससे कोई गतिविधि शुरू करने की कोशिश करें.
  2. अगर उस इंटेंट के लिए कोई गतिविधि फ़िल्टर नहीं होती है, तो अगली सबसे कम प्राथमिकता वाले इंटेंट (ACTION_TECH_DISCOVERED या ACTION_TAG_DISCOVERED) के साथ कोई गतिविधि शुरू करने की कोशिश करें. ऐसा तब तक करें, जब तक कोई ऐप्लिकेशन उस इंटेंट के लिए फ़िल्टर न कर दे या टैग डिस्पैच सिस्टम सभी संभावित इंटेंट आज़मा न दे.
  3. अगर किसी भी इंटेंट के लिए कोई भी ऐप्लिकेशन फ़िल्टर नहीं करता है, तो कुछ भी न करें.
पहली इमेज. टैग डिस्पैच सिस्टम

जब भी हो सके, NDEF मैसेज और ACTION_NDEF_DISCOVERED इंटेंट का इस्तेमाल करें, क्योंकि यह तीनों में से सबसे सटीक है. इस इंटेंट की मदद से, अपने ऐप्लिकेशन को अन्य दो इंटेंट के मुकाबले ज़्यादा सही समय पर शुरू किया जा सकता है. इससे, उपयोगकर्ता को बेहतर अनुभव मिलता है.

Android मेनिफ़ेस्ट में एनएफ़सी के ऐक्सेस का अनुरोध करना

किसी डिवाइस के एनएफ़सी हार्डवेयर को ऐक्सेस करने और एनएफ़सी इंटेंट को सही तरीके से मैनेज करने से पहले, अपनी AndroidManifest.xml फ़ाइल में इन आइटम के बारे में बताएं:

  • एनएफ़सी हार्डवेयर को ऐक्सेस करने के लिए, एनएफ़सी <uses-permission> एलिमेंट:
    <uses-permission android:name="android.permission.NFC" />
  • SDK टूल का वह कम से कम वर्शन जिस पर आपका ऐप्लिकेशन काम कर सकता है. एपीआई लेवल 9, सिर्फ़ ACTION_TAG_DISCOVERED के ज़रिए सीमित टैग डिस्पैच के साथ काम करता है. साथ ही, सिर्फ़ EXTRA_NDEF_MESSAGES एक्सट्रा के ज़रिए एनडीएफ़ई मैसेज का ऐक्सेस देता है. कोई भी टैग प्रॉपर्टी या I/O ऑपरेशन ऐक्सेस नहीं किया जा सकता. एपीआई लेवल 10 में, रीडर/राइटर्स के साथ-साथ फ़ोरग्राउंड एनडीएफ़ पुश करने की सुविधा भी शामिल है. वहीं, एपीआई लेवल 14 में एनडीएफ़ रिकॉर्ड बनाने के लिए, ज़्यादा सुविधाजनक तरीके उपलब्ध हैं.
    <uses-sdk android:minSdkVersion="10"/>
  • uses-feature एलिमेंट, ताकि आपका ऐप्लिकेशन Google Play पर सिर्फ़ उन डिवाइसों के लिए दिखे जिनमें एनएफ़सी हार्डवेयर है:
    <uses-feature android:name="android.hardware.nfc" android:required="true" />

    अगर आपका ऐप्लिकेशन एनएफ़सी की सुविधा का इस्तेमाल करता है, लेकिन वह सुविधा आपके ऐप्लिकेशन के लिए ज़रूरी नहीं है, तो uses-feature एलिमेंट को हटाया जा सकता है. साथ ही, रनटाइम के दौरान एनएफ़सी की उपलब्धता की जांच की जा सकती है. इसके लिए, यह देखें कि getDefaultAdapter() null है या नहीं.

एनएफ़सी इंटेंट के लिए फ़िल्टर

अगर आपको किसी एनएफ़सी टैग को स्कैन करने पर अपना ऐप्लिकेशन शुरू करना है, तो आपका ऐप्लिकेशन, Android मेनिफ़ेस्ट में मौजूद तीनों एनएफ़सी इंटेंट में से एक, दो या तीनों को फ़िल्टर कर सकता है. हालांकि, आम तौर पर, आपको अपने ऐप्लिकेशन के शुरू होने के समय को पूरी तरह से कंट्रोल करने के लिए, ACTION_NDEF_DISCOVERED इंटेंट के लिए फ़िल्टर करना होगा. ACTION_TECH_DISCOVERED इंटेंट, ACTION_NDEF_DISCOVERED के लिए फ़ॉलबैक होता है. ऐसा तब होता है, जब कोई भी ऐप्लिकेशन ACTION_NDEF_DISCOVERED के लिए फ़िल्टर न करता हो या पेलोड NDEF न हो. आम तौर पर, ACTION_TAG_DISCOVERED के लिए फ़िल्टर करना, बहुत सामान्य कैटगरी होती है. कई ऐप्लिकेशन, ACTION_TAG_DISCOVERED से पहले ACTION_NDEF_DISCOVERED या ACTION_TECH_DISCOVERED के लिए फ़िल्टर करेंगे. इसलिए, आपके ऐप्लिकेशन के शुरू होने की संभावना कम है. ACTION_TAG_DISCOVERED सिर्फ़ ऐप्लिकेशन के लिए, आखिरी विकल्प के तौर पर उपलब्ध है. इसका इस्तेमाल तब किया जाता है, जब ACTION_NDEF_DISCOVERED या ACTION_TECH_DISCOVERED इंटेंट को मैनेज करने के लिए कोई दूसरा ऐप्लिकेशन इंस्टॉल न हो.

एनएफ़सी टैग को अलग-अलग तरह से डिप्लॉय किया जाता है और कई बार यह आपके कंट्रोल में नहीं होता. इसलिए, ऐसा करना हमेशा संभव नहीं होता. ज़रूरत पड़ने पर, दो अन्य इंटेंट का इस्तेमाल किया जा सकता है. अगर आपके पास टैग के टाइप और लिखे गए डेटा पर कंट्रोल है, तो हमारा सुझाव है कि आप अपने टैग को फ़ॉर्मैट करने के लिए NDEF का इस्तेमाल करें. नीचे दिए गए सेक्शन में, हर तरह के इंटेंट को फ़िल्टर करने का तरीका बताया गया है.

ACTION_NDEF_DISCOVERED

ACTION_NDEF_DISCOVERED इंटेंट के लिए फ़िल्टर करने के लिए, उस डेटा टाइप के साथ इंटेंट फ़िल्टर का एलान करें जिसके लिए आपको फ़िल्टर करना है. यहां दिए गए उदाहरण में, text/plain MIME टाइप वाले ACTION_NDEF_DISCOVERED इंटेंट को फ़िल्टर किया गया है:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="text/plain" />
</intent-filter>

यहां दिए गए उदाहरण में, https://developer.android.com/index.html के तौर पर यूआरआई को फ़िल्टर किया गया है.

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT"/>
   <data android:scheme="https"
              android:host="developer.android.com"
              android:pathPrefix="/index.html" />
</intent-filter>

ACTION_TECH_DISCOVERED

अगर आपकी गतिविधि, ACTION_TECH_DISCOVERED इंटेंट के लिए फ़िल्टर करती है, तो आपको एक एक्सएमएल रिसॉर्स फ़ाइल बनानी होगी. इसमें उन टेक्नोलॉजी के बारे में बताया जाना चाहिए जिन पर आपकी गतिविधि, tech-list सेट में काम करती है. अगर tech-list सेट, उन टेक्नोलॉजी का सबसेट है जिन पर टैग काम करता है, तो आपकी गतिविधि को मैच माना जाता है. getTechList() को कॉल करके, इन टेक्नोलॉजी के बारे में पता लगाया जा सकता है.

उदाहरण के लिए, अगर स्कैन किया गया टैग MifareClassic, NdefFormatable, और NfcA के साथ काम करता है, तो आपकी गतिविधि का मिलान करने के लिए, आपके tech-list सेट में तीनों, दो या एक टेक्नोलॉजी (और कुछ और नहीं) के बारे में बताया जाना चाहिए.

यहां दिए गए सैंपल में सभी टेक्नोलॉजी के बारे में बताया गया है. आपको उन टैग को हटाना होगा जो आपके एनएफ़सी टैग पर काम नहीं करते. इस फ़ाइल को <project-root>/res/xml फ़ोल्डर में सेव करें. इसे अपनी पसंद का कोई भी नाम दिया जा सकता है.

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.IsoDep</tech>
        <tech>android.nfc.tech.NfcA</tech>
        <tech>android.nfc.tech.NfcB</tech>
        <tech>android.nfc.tech.NfcF</tech>
        <tech>android.nfc.tech.NfcV</tech>
        <tech>android.nfc.tech.Ndef</tech>
        <tech>android.nfc.tech.NdefFormatable</tech>
        <tech>android.nfc.tech.MifareClassic</tech>
        <tech>android.nfc.tech.MifareUltralight</tech>
    </tech-list>
</resources>

एक से ज़्यादा tech-list सेट भी तय किए जा सकते हैं. हर tech-list सेट को अलग से माना जाता है. अगर कोई एक tech-list सेट, getTechList() से मिलने वाली टेक्नोलॉजी का सबसेट है, तो आपकी गतिविधि को मैच माना जाता है. इससे, मैच करने वाली टेक्नोलॉजी के लिए AND और OR के ज़रिए सेमेनटिक्स मिलता है. यहां दिए गए उदाहरण में, ऐसे टैग से मैच किया जाता है जो NfcA और Ndef टेक्नोलॉजी के साथ काम कर सकते हैं या NfcB और Ndef टेक्नोलॉजी के साथ काम कर सकते हैं:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.NfcA</tech>
        <tech>android.nfc.tech.Ndef</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcB</tech>
        <tech>android.nfc.tech.Ndef</tech>
    </tech-list>
</resources>

अपनी AndroidManifest.xml फ़ाइल में, <activity> एलिमेंट के अंदर <meta-data> एलिमेंट में, वह संसाधन फ़ाइल डालें जो आपने अभी बनाई है. उदाहरण के लिए:

<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>

टैग टेक्नोलॉजी और ACTION_TECH_DISCOVERED इंटेंट के साथ काम करने के बारे में ज़्यादा जानकारी के लिए, बेहतर एनएफ़सी दस्तावेज़ में काम करने वाली टैग टेक्नोलॉजी के साथ काम करना देखें.

ACTION_TAG_DISCOVERED

ACTION_TAG_DISCOVERED के लिए फ़िल्टर करने के लिए, नीचे दिए गए इंटेंट फ़िल्टर का इस्तेमाल करें:

<intent-filter>
    <action android:name="android.nfc.action.TAG_DISCOVERED"/>
</intent-filter>

ACTION_VIEW

Android 16 से, यूआरएल लिंक सेव करने वाले एनएफ़सी टैग को स्कैन करने पर, ACTION_VIEW इंटेंट ट्रिगर होगा. ACTION_VIEW के लिए फ़िल्टर करने के लिए, this देखें. यूआरएल के लिए अपना ऐप्लिकेशन खोलने के लिए, Android app links का इस्तेमाल करें.

इंटेंट से जानकारी पाना

अगर कोई गतिविधि एनएफ़सी इंटेंट की वजह से शुरू होती है, तो इंटेंट से स्कैन किए गए एनएफ़सी टैग के बारे में जानकारी मिल सकती है. स्कैन किए गए टैग के आधार पर, इंटेंट में ये अतिरिक्त चीज़ें शामिल हो सकती हैं:

  • EXTRA_TAG (ज़रूरी है): स्कैन किए गए टैग को दिखाने वाला Tag ऑब्जेक्ट.
  • EXTRA_NDEF_MESSAGES (ज़रूरी नहीं): टैग से पार्स किए गए NDEF मैसेज का कलेक्शन. ACTION_NDEF_DISCOVERED इंटेंट के लिए, यह अतिरिक्त एट्रिब्यूट ज़रूरी है.
  • EXTRA_ID (ज़रूरी नहीं): टैग का लो-लेवल आईडी.

इन अतिरिक्त जानकारी को पाने के लिए, देखें कि आपकी गतिविधि को एनएफ़सी इंटेंट में से किसी एक के साथ लॉन्च किया गया था या नहीं. इससे यह पक्का किया जा सकेगा कि टैग को स्कैन किया गया था. इसके बाद, इंटेंट से अतिरिक्त जानकारी पाएं. नीचे दिया गया उदाहरण, ACTION_NDEF_DISCOVERED के इंटेंट की जांच करता है और इंटेंट एक्सट्रा से NDEF मैसेज पाता है.

Kotlin

override fun onNewIntent(intent: Intent) {
    super.onNewIntent(intent)
    ...
    if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) {
        intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)?.also { rawMessages ->
            val messages: List<NdefMessage> = rawMessages.map { it as NdefMessage }
            // Process the messages array.
            ...
        }
    }
}

Java

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    ...
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
        Parcelable[] rawMessages =
            intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
        if (rawMessages != null) {
            NdefMessage[] messages = new NdefMessage[rawMessages.length];
            for (int i = 0; i < rawMessages.length; i++) {
                messages[i] = (NdefMessage) rawMessages[i];
            }
            // Process the messages array.
            ...
        }
    }
}

इसके अलावा, इंटेंट से Tag ऑब्जेक्ट भी पाया जा सकता है. इसमें पेलोड शामिल होगा और आपको टैग की टेक्नोलॉजी की जानकारी भी मिलेगी:

Kotlin

val tag: Tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)

Java

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

सामान्य तौर पर इस्तेमाल होने वाले NDEF रिकॉर्ड बनाना

इस सेक्शन में, आम तौर पर इस्तेमाल होने वाले NDEF रिकॉर्ड बनाने का तरीका बताया गया है. इससे आपको एनएफ़सी टैग में जानकारी लिखने में मदद मिलेगी. Android 4.0 (एपीआई लेवल 14) से, createUri() तरीका उपलब्ध है. इससे यूआरआई रिकॉर्ड अपने-आप बनने में मदद मिलती है. Android 4.1 (एपीआई लेवल 16) से, createExternal() और createMime() उपलब्ध हैं. इनकी मदद से, MIME और बाहरी टाइप के एनडीएफ़ रिकॉर्ड बनाए जा सकते हैं. मैन्युअल तरीके से एनडीएफ़ रिकॉर्ड बनाते समय, गड़बड़ियों से बचने के लिए, जब भी हो सके इन सहायक तरीकों का इस्तेमाल करें.

इस सेक्शन में, रिकॉर्ड के लिए मिलते-जुलते इंटेंट फ़िल्टर बनाने का तरीका भी बताया गया है. इन सभी NDEF रिकॉर्ड के उदाहरण, उस NDEF मैसेज के पहले NDEF रिकॉर्ड में होने चाहिए जिसे टैग में लिखा जा रहा है.

TNF_ABSOLUTE_URI

ध्यान दें: हमारा सुझाव है कि आप TNF_ABSOLUTE_URI के बजाय, RTD_URI टाइप का इस्तेमाल करें, क्योंकि यह ज़्यादा असरदार है.

TNF_ABSOLUTE_URI NDEF रिकॉर्ड बनाने के लिए, यह तरीका अपनाएं :

Kotlin

val uriRecord = ByteArray(0).let { emptyByteArray ->
    NdefRecord(
            TNF_ABSOLUTE_URI,
            "https://developer.android.com/index.html".toByteArray(Charset.forName("US-ASCII")),
            emptyByteArray,
            emptyByteArray
    )
}

Java

NdefRecord uriRecord = new NdefRecord(
    NdefRecord.TNF_ABSOLUTE_URI ,
    "https://developer.android.com/index.html".getBytes(Charset.forName("US-ASCII")),
    new byte[0], new byte[0]);

पिछले NDEF रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="https"
        android:host="developer.android.com"
        android:pathPrefix="/index.html" />
</intent-filter>

TNF_MIME_MEDIA

TNF_MIME_MEDIA NDEF रिकॉर्ड बनाने के लिए, ये तरीके अपनाए जा सकते हैं:

createMime() वाले तरीके का इस्तेमाल करके:

Kotlin

val mimeRecord = NdefRecord.createMime(
        "application/vnd.com.example.android.beam",
        "Beam me up, Android".toByteArray(Charset.forName("US-ASCII"))
)

Java

NdefRecord mimeRecord = NdefRecord.createMime("application/vnd.com.example.android.beam",
    "Beam me up, Android".getBytes(Charset.forName("US-ASCII")));

NdefRecord को मैन्युअल तरीके से बनाना:

Kotlin

val mimeRecord = Charset.forName("US-ASCII").let { usAscii ->
    NdefRecord(
            NdefRecord.TNF_MIME_MEDIA,
            "application/vnd.com.example.android.beam".toByteArray(usAscii),
            ByteArray(0),
            "Beam me up, Android!".toByteArray(usAscii)
    )
}

Java

NdefRecord mimeRecord = new NdefRecord(
    NdefRecord.TNF_MIME_MEDIA ,
    "application/vnd.com.example.android.beam".getBytes(Charset.forName("US-ASCII")),
    new byte[0], "Beam me up, Android!".getBytes(Charset.forName("US-ASCII")));

पिछले NDEF रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="application/vnd.com.example.android.beam" />
</intent-filter>

RTD_TEXT के साथ TNF_WELL_KNOWN

TNF_WELL_KNOWN NDEF रिकॉर्ड बनाने के लिए, यह तरीका अपनाएं:

Kotlin

fun createTextRecord(payload: String, locale: Locale, encodeInUtf8: Boolean): NdefRecord {
    val langBytes = locale.language.toByteArray(Charset.forName("US-ASCII"))
    val utfEncoding = if (encodeInUtf8) Charset.forName("UTF-8") else Charset.forName("UTF-16")
    val textBytes = payload.toByteArray(utfEncoding)
    val utfBit: Int = if (encodeInUtf8) 0 else 1 shl 7
    val status = (utfBit + langBytes.size).toChar()
    val data = ByteArray(1 + langBytes.size + textBytes.size)
    data[0] = status.toByte()
    System.arraycopy(langBytes, 0, data, 1, langBytes.size)
    System.arraycopy(textBytes, 0, data, 1 + langBytes.size, textBytes.size)
    return NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, ByteArray(0), data)
}

Java

public NdefRecord createTextRecord(String payload, Locale locale, boolean encodeInUtf8) {
    byte[] langBytes = locale.getLanguage().getBytes(Charset.forName("US-ASCII"));
    Charset utfEncoding = encodeInUtf8 ? Charset.forName("UTF-8") : Charset.forName("UTF-16");
    byte[] textBytes = payload.getBytes(utfEncoding);
    int utfBit = encodeInUtf8 ? 0 : (1 << 7);
    char status = (char) (utfBit + langBytes.length);
    byte[] data = new byte[1 + langBytes.length + textBytes.length];
    data[0] = (byte) status;
    System.arraycopy(langBytes, 0, data, 1, langBytes.length);
    System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length);
    NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
    NdefRecord.RTD_TEXT, new byte[0], data);
    return record;
}

पिछले NDEF रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="text/plain" />
</intent-filter>

RTD_URI के साथ TNF_WELL_KNOWN

TNF_WELL_KNOWN NDEF रिकॉर्ड बनाने के लिए, ये तरीके अपनाए जा सकते हैं:

createUri(String) वाले तरीके का इस्तेमाल करके:

Kotlin

val rtdUriRecord1 = NdefRecord.createUri("https://example.com")

Java

NdefRecord rtdUriRecord1 = NdefRecord.createUri("https://example.com");

createUri(Uri) वाले तरीके का इस्तेमाल करके:

Kotlin

val rtdUriRecord2 = Uri.parse("https://example.com").let { uri ->
    NdefRecord.createUri(uri)
}

Java

Uri uri = Uri.parse("https://example.com");
NdefRecord rtdUriRecord2 = NdefRecord.createUri(uri);

NdefRecord को मैन्युअल तरीके से बनाना:

Kotlin

val uriField = "example.com".toByteArray(Charset.forName("US-ASCII"))
val payload = ByteArray(uriField.size + 1)                   //add 1 for the URI Prefix
payload [0] = 0x01                                           //prefixes https://www. to the URI
System.arraycopy(uriField, 0, payload, 1, uriField.size)     //appends URI to payload
val rtdUriRecord = NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, ByteArray(0), payload)

Java

byte[] uriField = "example.com".getBytes(Charset.forName("US-ASCII"));
byte[] payload = new byte[uriField.length + 1];              //add 1 for the URI Prefix
payload[0] = 0x01;                                           //prefixes https://www. to the URI
System.arraycopy(uriField, 0, payload, 1, uriField.length);  //appends URI to payload
NdefRecord rtdUriRecord = new NdefRecord(
    NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload);

पिछले NDEF रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="https"
        android:host="example.com"
        android:pathPrefix="" />
</intent-filter>

TNF_EXTERNAL_TYPE

TNF_EXTERNAL_TYPE NDEF रिकॉर्ड बनाने के लिए, ये तरीके अपनाए जा सकते हैं:

createExternal() वाले तरीके का इस्तेमाल करके:

Kotlin

var payload: ByteArray //assign to your data
val domain = "com.example" //usually your app's package name
val type = "externalType"
val extRecord = NdefRecord.createExternal(domain, type, payload)

Java

byte[] payload; //assign to your data
String domain = "com.example"; //usually your app's package name
String type = "externalType";
NdefRecord extRecord = NdefRecord.createExternal(domain, type, payload);

NdefRecord को मैन्युअल तरीके से बनाना:

Kotlin

var payload: ByteArray
...
val extRecord = NdefRecord(
        NdefRecord.TNF_EXTERNAL_TYPE,
        "com.example:externalType".toByteArray(Charset.forName("US-ASCII")),
        ByteArray(0),
        payload
)

Java

byte[] payload;
...
NdefRecord extRecord = new NdefRecord(
    NdefRecord.TNF_EXTERNAL_TYPE, "com.example:externalType".getBytes(Charset.forName("US-ASCII")),
    new byte[0], payload);

पिछले NDEF रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="vnd.android.nfc"
        android:host="ext"
        android:pathPrefix="/com.example:externalType"/>
</intent-filter>

TNF_EXTERNAL_TYPE का इस्तेमाल करके, एनएफ़सी टैग को सामान्य तौर पर डिप्लॉय करें. इससे, Android और Android के अलावा दूसरे डिवाइसों पर भी बेहतर तरीके से काम किया जा सकेगा.

ध्यान दें: TNF_EXTERNAL_TYPE के लिए यूआरएन का कैननिकल फ़ॉर्मैट यह है: urn:nfc:ext:example.com:externalType. हालांकि, एनएफ़सी फ़ोरम आरटीडी स्पेसिफ़िकेशन में बताया गया है कि यूआरएन के urn:nfc:ext: हिस्से को एनडीएफ़ रिकॉर्ड से हटा दिया जाना चाहिए. इसलिए, आपको सिर्फ़ डोमेन (उदाहरण में example.com) और टाइप (उदाहरण में externalType) की जानकारी देनी होगी. इन दोनों को कोलन लगाकर अलग किया जाना चाहिए. TNF_EXTERNAL_TYPE डिस्पैच करते समय, Android urn:nfc:ext:example.com:externalType यूआरएन को vnd.android.nfc://ext/example.com:externalType यूआरआई में बदल देता है. उदाहरण में, इंटेंट फ़िल्टर यही बताता है.

Android ऐप्लिकेशन के रिकॉर्ड

Android 4.0 (एपीआई लेवल 14) में लॉन्च किया गया Android ऐप्लिकेशन रिकॉर्ड (एएआर), इस बात की ज़्यादा पुष्टि करता है कि एनएफ़सी टैग स्कैन होने पर आपका ऐप्लिकेशन शुरू हो जाएगा. किसी AAR में, NDEF रिकॉर्ड में एम्बेड किए गए ऐप्लिकेशन का पैकेज नाम होता है. अपने एनडीएफ़ मैसेज के किसी भी एनडीएफ़ रिकॉर्ड में एएआर जोड़ा जा सकता है, क्योंकि Android पूरे एनडीएफ़ मैसेज में एएआर खोजता है. अगर उसे कोई AAR मिलता है, तो वह AAR में मौजूद पैकेज के नाम के आधार पर ऐप्लिकेशन को शुरू करता है. अगर ऐप्लिकेशन डिवाइस पर मौजूद नहीं है, तो ऐप्लिकेशन डाउनलोड करने के लिए Google Play लॉन्च किया जाता है.

अगर आपको अन्य ऐप्लिकेशन को उसी इंटेंट के लिए फ़िल्टर करने से रोकना है और आपके डिप्लॉय किए गए खास टैग को मैनेज करने से रोकना है, तो एएआर आपके काम के हैं. पैकेज के नाम से जुड़ी पाबंदी की वजह से, एएआर सिर्फ़ ऐप्लिकेशन लेवल पर काम करते हैं. ये गतिविधि के लेवल पर काम नहीं करते, जैसे कि इंटेंट फ़िल्टरिंग की सुविधा. अगर आपको गतिविधि के लेवल पर किसी इंटेंट को मैनेज करना है, तो इंटेंट फ़िल्टर का इस्तेमाल करें.

अगर किसी टैग में AAR है, तो टैग डिस्पैच सिस्टम इस तरीके से डिस्पैच करता है:

  1. सामान्य तौर पर, इंटेंट फ़िल्टर का इस्तेमाल करके कोई गतिविधि शुरू करने की कोशिश करें. अगर इंटेंट से मैच करने वाली गतिविधि, AAR से भी मैच करती है, तो गतिविधि शुरू करें.
  2. अगर इंटेंट के लिए फ़िल्टर करने वाली गतिविधि, एएआर से मेल नहीं खाती है, अगर इंटेंट को एक से ज़्यादा गतिविधियां हैंडल कर सकती हैं या अगर कोई भी गतिविधि इंटेंट को हैंडल नहीं करती है, तो एएआर से बताए गए ऐप्लिकेशन को शुरू करें.
  3. अगर कोई भी ऐप्लिकेशन AAR से शुरू नहीं हो पा रहा है, तो AAR के आधार पर ऐप्लिकेशन डाउनलोड करने के लिए Google Play पर जाएं.

ध्यान दें: फ़ोरग्राउंड डिस्पैच सिस्टम की मदद से, एएआर और इंटेंट डिस्पैच सिस्टम को बदला जा सकता है. इससे, एनएफ़सी टैग का पता चलने पर, फ़ोरग्राउंड गतिविधि को प्राथमिकता दी जा सकती है. इस तरीके से, गतिविधि को फ़ोरग्राउंड में होना चाहिए, ताकि एएआर और इंटेंट डिस्पैच सिस्टम को बदला जा सके.

अगर आपको अब भी ऐसे स्कैन किए गए टैग को फ़िल्टर करना है जिनमें एएआर नहीं है, तो इंटेंट फ़िल्टर को सामान्य के तौर पर दिखाया जा सकता है. यह तब काम आता है, जब आपके ऐप्लिकेशन को ऐसे अन्य टैग में दिलचस्पी हो जिनमें AAR शामिल न हो. उदाहरण के लिए, हो सकता है कि आपको यह पक्का करना हो कि आपका ऐप्लिकेशन, आपके डिप्लॉय किए गए मालिकाना टैग के साथ-साथ तीसरे पक्ष के डिप्लॉय किए गए सामान्य टैग को भी मैनेज करता है. ध्यान रखें कि AAR, Android 4.0 या उसके बाद के वर्शन वाले डिवाइसों के लिए ही हैं. इसलिए, टैग डिप्लॉय करते समय, ज़्यादा से ज़्यादा डिवाइसों के साथ काम करने के लिए, AAR और MIME टाइप/यूआरआई के कॉम्बिनेशन का इस्तेमाल करें. इसके अलावा, एनएफ़सी टैग डिप्लॉय करते समय, इस बात पर ध्यान दें कि आपको अपने एनएफ़सी टैग को कैसे लिखना है, ताकि ज़्यादा से ज़्यादा डिवाइसों (Android और अन्य डिवाइसों) के लिए सहायता चालू की जा सके. ऐसा करने के लिए, एक यूनीक MIME टाइप या यूआरआई तय करें, ताकि ऐप्लिकेशन आसानी से इनके बीच अंतर कर सकें.

Android, AAR बनाने के लिए एक आसान एपीआई उपलब्ध कराता है, createApplicationRecord(). इसके लिए, आपको अपने NdefMessage में कहीं भी AAR को एम्बेड करना होगा. आपको अपने NdefMessage के पहले रिकॉर्ड का इस्तेमाल नहीं करना है. ऐसा तब तक नहीं किया जा सकता, जब तक कि NdefMessage में सिर्फ़ AAR रिकॉर्ड मौजूद न हो. ऐसा इसलिए होता है, क्योंकि Android सिस्टम, टैग के MIME टाइप या यूआरआई का पता लगाने के लिए, NdefMessage के पहले रिकॉर्ड की जांच करता है. इसका इस्तेमाल, ऐप्लिकेशन को फ़िल्टर करने के लिए इंटेंट बनाने के लिए किया जाता है. यहां दिए गए कोड से, आपको AAR बनाने का तरीका पता चलेगा:

Kotlin

val msg = NdefMessage(
        arrayOf(
                ...,
                NdefRecord.createApplicationRecord("com.example.android.beam")
        )
)

Java

NdefMessage msg = new NdefMessage(
        new NdefRecord[] {
            ...,
            NdefRecord.createApplicationRecord("com.example.android.beam")}
        );
)

एनएफ़सी टैग स्कैन करने के लिए, ऐप्लिकेशन की अनुमति वाली सूची

Android 16 से, जब किसी ऐप्लिकेशन को एनएफ़सी टैग स्कैन करने के लिए पहला एनएफ़सी इंटेंट मिलता है, तो उपयोगकर्ताओं को इसकी सूचना दी जाती है. उपयोगकर्ता को सूचना में, ऐप्लिकेशन को एनएफ़सी टैग स्कैन करने से रोकने का विकल्प दिया जाता है.

  • ऐप्लिकेशन यह जांच कर सकते हैं कि उपयोगकर्ता ने ऐप्लिकेशन को NfcAdapter.isTagIntentAllowed() का इस्तेमाल करके, एनएफ़सी टैग स्कैन करने की अनुमति दी है या नहीं.
  • ऐप्लिकेशन, इंटेंट भेजकर उपयोगकर्ता को एनएफ़सी टैग को फिर से स्कैन करने की अनुमति देने के लिए कह सकते हैं ACTION_CHANGE_TAG_INTENT_PREFERENCE.

ध्यान दें: एनएफ़सी टैग स्कैन करने की अनुमति वाले ऐप्लिकेशन की सूची, Settings > Apps > Special app access > Launch via NFC में जाकर देखी जा सकती है.

इस सुविधा को, उपयोगकर्ताओं की उन समस्याओं को हल करने के लिए जोड़ा गया था जिनमें एनएफ़सी टैग के इंटेंट के लिए रजिस्टर किए गए इंटेंट फ़िल्टर वाले कुछ ऐप्लिकेशन, फ़ोन को किसी एनएफ़सी टैग (क्रेडिट कार्ड, किसी दूसरे फ़ोन/स्मार्टवॉच वगैरह) के बगल में रखने पर, बार-बार फ़ोरग्राउंड में आ जाते थे.