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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

टाइप नेम फ़ॉर्मैट (टीएनएफ़) मैपिंग
TNF_ABSOLUTE_URI टाइप फ़ील्ड के आधार पर यूआरआई.
TNF_EMPTY ACTION_TECH_DISCOVERED पर वापस आ जाता है.
TNF_EXTERNAL_TYPE टाइप फ़ील्ड में मौजूद यूआरएन के आधार पर यूआरआई. यूआरएन को एनडीईएफ़ टाइप फ़ील्ड में, छोटे किए गए फ़ॉर्म में एन्कोड किया जाता है: <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 से, यूआरएल लिंक सेव करने वाले एनएफ़सी टैग (यानी कि यूआरआई स्कीम "https://" या "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. अगर किसी भी इंटेंट के लिए, ऐप्लिकेशन फ़िल्टर नहीं किया गया है, तो कोई कार्रवाई न करें.
पहली इमेज. Tag Dispatch System

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

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

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

  • एनएफ़सी हार्डवेयर को ऐक्सेस करने के लिए, एनएफ़सी <uses-permission> एलिमेंट:
    <uses-permission android:name="android.permission.NFC" />
  • Android 17 (एपीआई लेवल 37) से, किसी गतिविधि को एनएफ़सी इंटेंट भेजने के लिए, अगर ऐप्लिकेशन SDK > Build.VERSION_CODES.BAKLAVA को टारगेट करता है, तो उसे android.permission.DISPATCH_NFC_MESSAGE अनुमति से सुरक्षित किया जाना चाहिए. इससे यह पक्का होता है कि सिर्फ़ NFC सिस्टम सेवा ही आपकी गतिविधि को इंटेंट भेज सकती है. इसके अलावा, सिस्टम उन ऐप्लिकेशन को एनएफ़सी इंटेंट नहीं भेजेगा जो बंद हैं. उदाहरण के लिए, अगर उपयोगकर्ता ने कभी ऐप्लिकेशन लॉन्च नहीं किया है या उसे बंद कर दिया गया है.
    <activity
        android:name=".MyActivity"
        android:exported="true"
        android:permission="android.permission.DISPATCH_NFC_MESSAGE">
        ...
    </activity>
  • एसडीके का वह सबसे पुराना वर्शन जिस पर आपका ऐप्लिकेशन काम कर सकता है. एपीआई लेवल 9 में, ACTION_TAG_DISCOVERED के ज़रिए सिर्फ़ सीमित टैग डिसपैच करने की सुविधा मिलती है. साथ ही, EXTRA_NDEF_MESSAGES एक्स्ट्रा के ज़रिए सिर्फ़ NDEF मैसेज का ऐक्सेस मिलता है. टैग की अन्य प्रॉपर्टी या I/O कार्रवाइयां ऐक्सेस नहीं की जा सकतीं. एपीआई लेवल 10 में, रीडर/राइटर के लिए पूरी तरह से सहायता उपलब्ध है. साथ ही, इसमें फ़ोरग्राउंड में एनडीईएफ़ पुश करने की सुविधा भी शामिल है. वहीं, एपीआई लेवल 14 में, एनडीईएफ़ रिकॉर्ड बनाने के लिए अतिरिक्त सुविधाजनक तरीके उपलब्ध हैं.
    <uses-sdk android:minSdkVersion="10"/>
  • uses-feature एलिमेंट, ताकि आपका ऐप्लिकेशन Google Play पर सिर्फ़ उन डिवाइसों के लिए दिखे जिनमें NFC हार्डवेयर है:
    <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 इंटेंट को फ़िल्टर किया गया है:

<activity
    android:name=".MyActivity"
    android:exported="true"
    android:permission="android.permission.DISPATCH_NFC_MESSAGE">
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

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

<activity
    android:name=".MyActivity"
    android:exported="true"
    android:permission="android.permission.DISPATCH_NFC_MESSAGE">
    <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>
</activity>

ACTION_TECH_DISCOVERED

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

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

यहां दिए गए उदाहरण में, सभी टेक्नोलॉजी के बारे में बताया गया है. आपको वे पास हटाने होंगे जो आपके NFC टैग के साथ काम नहीं करते. इस फ़ाइल को <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
    android:name=".MyActivity"
    android:exported="true"
    android:permission="android.permission.DISPATCH_NFC_MESSAGE">
    <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 इंटेंट के साथ काम करने के बारे में ज़्यादा जानकारी के लिए, Advanced NFC दस्तावेज़ में सपोर्ट की गई टैग टेक्नोलॉजी के साथ काम करना लेख पढ़ें.

ACTION_TAG_DISCOVERED

ध्यान दें: ACTION_TAG_DISCOVERED को Android 17 (एपीआई लेवल 37) से हटा दिया गया है. इसके बजाय, ACTION_NDEF_DISCOVERED या ACTION_TECH_DISCOVERED का इस्तेमाल करें.

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

<activity
    android:name=".MyActivity"
    android:exported="true"
    android:permission="android.permission.DISPATCH_NFC_MESSAGE">
    <intent-filter>
        <action android:name="android.nfc.action.TAG_DISCOVERED"/>
    </intent-filter>
</activity>

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 रिकॉर्ड बनाने का तरीका बताया गया है. इससे आपको NFC टैग में डेटा लिखने में मदद मिलेगी. Android 4.0 (एपीआई लेवल 14) से, createUri() मेथड उपलब्ध है. इससे यूआरआई रिकॉर्ड अपने-आप जनरेट होते हैं. Android 4.1 (एपीआई लेवल 16) से, createExternal() और createMime() उपलब्ध हैं. इनकी मदद से, MIME और बाहरी टाइप के 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 रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:

<activity
    android:name=".MyActivity"
    android:exported="true"
    android:permission="android.permission.DISPATCH_NFC_MESSAGE">
    <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>
</activity>

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 रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:

<activity
    android:name=".MyActivity"
    android:exported="true"
    android:permission="android.permission.DISPATCH_NFC_MESSAGE">
    <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>
</activity>

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 रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:

<activity
    android:name=".MyActivity"
    android:exported="true"
    android:permission="android.permission.DISPATCH_NFC_MESSAGE">
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

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 रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:

<activity
    android:name=".MyActivity"
    android:exported="true"
    android:permission="android.permission.DISPATCH_NFC_MESSAGE">
    <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>
</activity>

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 रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:

<activity
    android:name=".MyActivity"
    android:exported="true"
    android:permission="android.permission.DISPATCH_NFC_MESSAGE">
    <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>
</activity>

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

ध्यान दें: TNF_EXTERNAL_TYPE के यूआरएन का कैननिकल फ़ॉर्मैट यह है: urn:nfc:ext:example.com:externalType. हालांकि, NFC फ़ोरम आरटीडी स्पेसिफ़िकेशन के मुताबिक, यूआरएन के urn:nfc:ext: हिस्से को NDEF रिकॉर्ड से हटाना ज़रूरी है. इसलिए, आपको सिर्फ़ डोमेन (उदाहरण में 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 रिकॉर्ड में एम्बेड किया जाता है. अपने NDEF मैसेज के किसी भी NDEF रिकॉर्ड में AAR जोड़ा जा सकता है. ऐसा इसलिए, क्योंकि Android पूरे NDEF मैसेज में AAR खोजता है. अगर इसे कोई एएआर मिलता है, तो यह एएआर में मौजूद पैकेज के नाम के आधार पर ऐप्लिकेशन शुरू करता है. अगर डिवाइस पर ऐप्लिकेशन मौजूद नहीं है, तो उसे डाउनलोड करने के लिए Google Play लॉन्च किया जाता है.

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

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

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

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

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

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

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