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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ध्यान दें: Android 16 से, वेब लिंक सेव करने वाले एनएफ़सी टैग (यानी, यूआरआई स्कीम "http://" या "https://" है) को स्कैन करने पर, ACTION_NDEF_DISCOVERED इंटेंट के बजाय ACTION_VIEW इंटेंट ट्रिगर होता है. Android 17 से, ऐसे टैग को स्कैन करने पर "लिंक खोलें" सूचना दिखती है. इससे 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 अनुमति से सुरक्षित किया जाना चाहिए. इससे यह पक्का होता है कि सिर्फ़ एनएफ़सी सिस्टम सर्विस ही आपकी ऐक्टिविटी को इंटेंट भेज सकती है. इसके अलावा, सिस्टम उन ऐप्लिकेशन को एनएफ़सी इंटेंट नहीं भेजेगा जो बंद हैं. उदाहरण के लिए, अगर उपयोगकर्ता ने कभी ऐप्लिकेशन लॉन्च नहीं किया है या उसे बंद कर दिया गया है.
    <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 एमआईएमई टाइप वाले 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 सेट में इन तीनों, दो या एक टेक्नोलॉजी के बारे में बताना होगा. इसके अलावा, कुछ और नहीं बताना होगा, ताकि आपकी गतिविधि का मिलान किया जा सके.

यहां दिए गए उदाहरण में, सभी टेक्नोलॉजी के बारे में बताया गया है. आपको वे पास हटाने होंगे जो आपके एनएफ़सी टैग के साथ काम नहीं करते. इस फ़ाइल को <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 इंटेंट के साथ काम करने के बारे में ज़्यादा जानने के लिए, ऐडवांस एनएफ़सी दस्तावेज़ में सपोर्ट की गई टैग टेक्नोलॉजी के साथ काम करना लेख पढ़ें.

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 से, वेब लिंक सेव करने वाले एनएफ़सी टैग (यानी कि यूआरआई स्कीम "http://" या "https://" है) को स्कैन करने पर, ACTION_NDEF_DISCOVERED इंटेंट के बजाय ACTION_VIEW इंटेंट ट्रिगर होता है. Android 17 से, ऐसे टैग को स्कैन करने पर "लिंक खोलें" सूचना दिखती है. इससे 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")));

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

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

TNF_WELL_KNOWN with RTD_TEXT

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

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

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

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

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

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

<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 और अन्य डिवाइसों) पर काम कर सकें. इसके लिए, कोई ऐसा एमआईएमई टाइप या यूआरआई तय करें जो काफ़ी हद तक यूनीक हो, ताकि ऐप्लिकेशन के लिए अंतर करना आसान हो.

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

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