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

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

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

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

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

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

  1. एनएफ़सी टैग को पार्स करना और MIME टाइप या यूआरआई का पता लगाना. इससे टैग में मौजूद डेटा पेलोड की पहचान होती है.
  2. MIME टाइप या यूआरआई और पेलोड को इंटेंट में शामिल करना. पहले दो चरणों के बारे में, 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 फ़ॉर्मैट वाले डेटा वाले किसी NFC टैग को स्कैन करता है, तो वह मैसेज को पार्स करता है. साथ ही, डेटा के MIME टाइप या पहचान करने वाले यूआरआई का पता लगाने की कोशिश करता है. इसके लिए, सिस्टम NdefMessage में मौजूद पहले NdefRecord को पढ़ता है, ताकि यह तय किया जा सके कि पूरे NDEF मैसेज (एक NDEF मैसेज में कई NDEF रिकॉर्ड हो सकते हैं) को कैसे समझा जाए. सही फ़ॉर्मैट वाले NDEF मैसेज में, पहले NdefRecord में ये फ़ील्ड शामिल होते हैं:

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

टैग डिस्पैच सिस्टम, टीएनएफ़ और टाइप फ़ील्ड का इस्तेमाल करके, MIME टाइप या यूआरआई को NDEF मैसेज से मैप करने की कोशिश करता है. अगर यह प्रोसेस पूरी हो जाती है, तो यह जानकारी को ACTION_NDEF_DISCOVERED इंटेंट में शामिल कर देता है. साथ ही, इसमें असली पेलोड भी शामिल होता है. हालांकि, कुछ मामलों में ऐसा हो सकता है कि टैग डिस्पैच सिस्टम, पहले 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 यह यूआरआई, पेलोड पर आधारित होता है.

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

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

  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" />
  • एसडीके का वह कम से कम वर्शन जिस पर आपका ऐप्लिकेशन काम कर सकता है. एपीआई लेवल 9 में, ACTION_TAG_DISCOVERED के ज़रिए सिर्फ़ सीमित टैग डिसपैच करने की सुविधा मिलती है. साथ ही, EXTRA_NDEF_MESSAGES एक्स्ट्रा के ज़रिए सिर्फ़ NDEF मैसेज का ऐक्सेस मिलता है. टैग की अन्य प्रॉपर्टी या I/O कार्रवाइयां ऐक्सेस नहीं की जा सकतीं. एपीआई लेवल 10 में, रीडर/राइटर के लिए पूरी तरह से सहायता उपलब्ध है. साथ ही, इसमें फ़ोरग्राउंड में NDEF पुश करने की सुविधा भी है. वहीं, एपीआई लेवल 14 में, NDEF रिकॉर्ड बनाने के लिए ज़्यादा सुविधाजनक तरीके उपलब्ध हैं.
    <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 इंटेंट को फ़िल्टर किया गया है:

<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 सेट में इन तीनों, दो या एक टेक्नोलॉजी के बारे में बताना ज़रूरी है. साथ ही, आपकी गतिविधि का मिलान करने के लिए, इनके अलावा किसी और टेक्नोलॉजी के बारे में नहीं बताना चाहिए.

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

<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 रिकॉर्ड बनाने का तरीका बताया गया है. इससे आपको 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 रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:

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

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 लॉन्च किया जाता है.

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

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

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

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

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

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

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 में जाकर ऐक्सेस किया जा सकता है.

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