इस दस्तावेज़ में, Android में किए जाने वाले एनएफ़सी से जुड़े बुनियादी टास्क के बारे में बताया गया है. इसमें, एनडीएफ़ मैसेज के तौर पर एनएफ़सी डेटा भेजने और पाने का तरीका बताया गया है. साथ ही, इन सुविधाओं के साथ काम करने वाले Android फ़्रेमवर्क एपीआई के बारे में भी बताया गया है. ज़्यादा बेहतर विषयों के बारे में जानने के लिए, बेहतर एनएफ़सी देखें. इसमें, एनडीएफ़ डेटा के अलावा अन्य डेटा के साथ काम करने के बारे में भी चर्चा की गई है.
एनएफ़सी टैग से NDEF डेटा पढ़ने की सुविधा, टैग डिस्पैच सिस्टम की मदद से मैनेज की जाती है. यह सिस्टम, ढूंढे गए एनएफ़सी टैग का विश्लेषण करता है, डेटा को सही कैटगरी में बांटता है, और उस कैटगरी के डेटा में दिलचस्पी रखने वाले ऐप्लिकेशन को शुरू करता है. स्कैन किए गए एनएफ़सी टैग को मैनेज करने वाला ऐप्लिकेशन, इंटेंट फ़िल्टर का एलान कर सकता है और डेटा को मैनेज करने का अनुरोध कर सकता है.
टैग डिस्पैच सिस्टम
आम तौर पर, Android डिवाइसों की स्क्रीन अनलॉक होने पर, वे एनएफ़सी टैग खोजते रहते हैं. ऐसा तब तक होता है, जब तक डिवाइस के सेटिंग मेन्यू में एनएफ़सी की सुविधा बंद नहीं की जाती. जब Android डिवाइस को कोई एनएफ़सी टैग मिलता है, तो सबसे सही गतिविधि को इंटेंट को मैनेज करना चाहिए. इसके लिए, उपयोगकर्ता से यह पूछने की ज़रूरत नहीं होती कि किस ऐप्लिकेशन का इस्तेमाल करना है. डिवाइस, एनएफ़सी टैग को बहुत कम रेंज में स्कैन करते हैं. इसलिए, हो सकता है कि उपयोगकर्ताओं को किसी गतिविधि को मैन्युअल तरीके से चुनने के लिए, डिवाइस को टैग से दूर ले जाना पड़े और कनेक्शन टूट जाए. आपको अपनी गतिविधि को सिर्फ़ उन एनएफ़सी टैग के लिए डिज़ाइन करना चाहिए जिनसे आपकी गतिविधि को फ़ायदा मिलता है. इससे, ऐक्टिविटी चुनने वाला टूल दिखने से रोका जा सकता है.
इस लक्ष्य को पूरा करने में आपकी मदद करने के लिए, Android एक खास टैग डिस्पैच सिस्टम उपलब्ध कराता है. यह स्कैन किए गए एनएफ़सी टैग का विश्लेषण करता है, उन्हें पार्स करता है, और स्कैन किए गए डेटा में दिलचस्पी रखने वाले ऐप्लिकेशन ढूंढने की कोशिश करता है. यह ऐसा इन तरीकों से करता है:
- एनएफ़सी टैग को पार्स करना और MIME टाइप या यूआरआई का पता लगाना, जो टैग में डेटा पेलोड की पहचान करता है.
- MIME टाइप या यूआरआई और पेलोड को इंटेंट में शामिल करना. पहले दो चरणों के बारे में एनएफ़सी टैग को एमआईएम टाइप और यूआरआई से कैसे मैप किया जाता है में बताया गया है.
- इंटेंट के आधार पर कोई गतिविधि शुरू करता है. इस बारे में ज़्यादा जानकारी के लिए, पढ़ें कि एनएफ़सी टैग को ऐप्लिकेशन पर कैसे भेजा जाता है.
एनएफ़सी टैग को MIME टाइप और यूआरआई से मैप करने का तरीका
एनएफ़सी ऐप्लिकेशन लिखने से पहले, यह समझना ज़रूरी है कि एनएफ़सी टैग के अलग-अलग टाइप क्या हैं, टैग डिस्पैच सिस्टम एनएफ़सी टैग को कैसे पार्स करता है, और एनडीएफ़ई मैसेज का पता चलने पर टैग डिस्पैच सिस्टम क्या खास काम करता है. एनएफ़सी टैग कई तरह की टेक्नोलॉजी में उपलब्ध होते हैं. साथ ही, इनमें कई तरीकों से डेटा डाला जा सकता है. Android में NDEF स्टैंडर्ड के लिए सबसे ज़्यादा सहायता मिलती है. इसे एनएफ़सी फ़ोरम तय करता है.
NDEF डेटा को एक मैसेज (NdefMessage
) में पैकेज किया जाता है. इसमें एक या उससे ज़्यादा रिकॉर्ड (NdefRecord
) होते हैं. आपको जिस तरह का रिकॉर्ड बनाना है उसके हिसाब से, हर NDEF रिकॉर्ड सही तरीके से बना होना चाहिए. Android, ऐसे अन्य टैग के साथ भी काम करता है जिनमें NDEF डेटा नहीं होता. इन टैग के साथ काम करने के लिए, android.nfc.tech
पैकेज में मौजूद क्लास का इस्तेमाल करें. इन टेक्नोलॉजी के बारे में ज़्यादा जानने के लिए, बेहतर एनएफ़सी विषय देखें. इस तरह के अन्य टैग के साथ काम करने के लिए, टैग के साथ कम्यूनिकेट करने के लिए अपना प्रोटोकॉल स्टैक लिखना पड़ता है. इसलिए, हमारा सुझाव है कि जब भी हो सके, NDEF का इस्तेमाल करें. इससे, डेवलपमेंट आसान हो जाता है और Android डिवाइसों के लिए ज़्यादा से ज़्यादा सहायता मिलती है.
ध्यान दें: NDEF के सभी स्पेसिफ़िकेशन डाउनलोड करने के लिए, एनएफ़सी फ़ोरम के स्पेसिफ़िकेशन और ऐप्लिकेशन दस्तावेज़ साइट पर जाएं. साथ ही, NDEF रिकॉर्ड बनाने के उदाहरणों के लिए, सामान्य टाइप के NDEF रिकॉर्ड बनाना देखें.
अब आपके पास एनएफ़सी टैग के बारे में कुछ जानकारी है. इसलिए, यहां दिए गए सेक्शन में इस बारे में ज़्यादा जानकारी दी गई है कि Android, एनडीएफ़ फ़ॉर्मैट वाले टैग को कैसे मैनेज करता है. जब Android डिवाइस, NDEF फ़ॉर्मैट में डेटा वाले किसी एनएफ़सी टैग को स्कैन करता है, तो वह मैसेज को पार्स करता है और डेटा का MIME टाइप या यूआरआई की पहचान करने की कोशिश करता है. इसके लिए, सिस्टम NdefMessage
में मौजूद पहला NdefRecord
पढ़ता है, ताकि यह पता लगाया जा सके कि पूरे NDEF मैसेज को कैसे समझा जाए. किसी NDEF मैसेज में कई NDEF रिकॉर्ड हो सकते हैं. सही तरीके से बनाए गए NDEF मैसेज में, पहले NdefRecord
में ये फ़ील्ड होते हैं:
- तीन बिट का TNF (टाइप नेम फ़ॉर्मैट)
- यह बताता है कि वैरिएबल लंबाई वाले फ़ील्ड को कैसे समझा जाए. मान्य वैल्यू के बारे में टेबल 1 में बताया गया है.
- वैरिएबल लंबाई का टाइप
- रिकॉर्ड के टाइप के बारे में बताता है. अगर
TNF_WELL_KNOWN
का इस्तेमाल किया जा रहा है, तो रिकॉर्ड टाइप की परिभाषा (RTD) बताने के लिए, इस फ़ील्ड का इस्तेमाल करें. आरटीडी की मान्य वैल्यू के बारे में टेबल 2 में बताया गया है. - वैरिएबल लंबाई वाला आईडी
- रिकॉर्ड के लिए यूनीक आइडेंटिफ़ायर. इस फ़ील्ड का अक्सर इस्तेमाल नहीं किया जाता. हालांकि, अगर आपको किसी टैग की खास तौर पर पहचान करनी है, तो इसके लिए आईडी बनाया जा सकता है.
- वैरिएबल लंबाई वाला पेलोड
- असल डेटा पेलोड, जिसे आपको पढ़ना या सेव करना है. किसी एनडीएफ़ मैसेज में एक से ज़्यादा एनडीएफ़ रिकॉर्ड हो सकते हैं. इसलिए, यह न मानें कि पूरा पेलोड, एनडीएफ़ मैसेज के पहले एनडीएफ़ रिकॉर्ड में है.
टैग डिस्पैच सिस्टम, TNF और टाइप फ़ील्ड का इस्तेमाल करके, MIME टाइप या यूआरआई को NDEF मैसेज से मैप करने की कोशिश करता है. अगर यह प्रोसेस पूरी हो जाती है, तो वह जानकारी ACTION_NDEF_DISCOVERED
इंटेंट के अंदर, असली पेलोड के साथ शामिल हो जाती है. हालांकि, कुछ मामलों में टैग डिस्पैच सिस्टम, पहले NDEF रिकॉर्ड के आधार पर डेटा टाइप का पता नहीं लगा पाता. ऐसा तब होता है, जब NDEF डेटा को MIME टाइप या यूआरआई पर मैप नहीं किया जा सकता या जब एनएफ़सी टैग में शुरू से ही NDEF डेटा मौजूद नहीं होता. ऐसे मामलों में, टैग की टेक्नोलॉजी और पेलोड की जानकारी वाले Tag
ऑब्जेक्ट को ACTION_TECH_DISCOVERED
इंटेंट में डाला जाता है.
टेबल 1 में बताया गया है कि टैग डिस्पैच सिस्टम, TNF और टाइप फ़ील्ड को MIME टाइप या यूआरआई से कैसे मैप करता है. इसमें यह भी बताया गया है कि किन TNF को MIME टाइप या यूआरआई से मैप नहीं किया जा सकता.
ऐसे मामलों में, टैग डिस्पैच सिस्टम ACTION_TECH_DISCOVERED
पर वापस आ जाता है.
उदाहरण के लिए, अगर टैग डिस्पैच सिस्टम को TNF_ABSOLUTE_URI
टाइप का कोई रिकॉर्ड मिलता है, तो वह उस रिकॉर्ड के वैरिएबल लेंथ टाइप फ़ील्ड को यूआरआई में मैप करता है. टैग डिस्पैच सिस्टम, उस यूआरआई को ACTION_NDEF_DISCOVERED
इंटेंट के डेटा फ़ील्ड में शामिल करता है. साथ ही, टैग के बारे में अन्य जानकारी भी शामिल करता है, जैसे कि पेलोड. वहीं दूसरी ओर, अगर उसे TNF_UNKNOWN
टाइप का कोई रिकॉर्ड मिलता है, तो वह टैग की टेक्नोलॉजी को शामिल करने वाला इंटेंट बनाता है.
टेबल 1. इस्तेमाल किए जा सकने वाले TNF और उनकी मैपिंग
टाइप का नाम फ़ॉर्मैट (TNF) | मैपिंग |
---|---|
TNF_ABSOLUTE_URI |
टाइप फ़ील्ड के आधार पर यूआरआई. |
TNF_EMPTY |
यह ACTION_TECH_DISCOVERED पर वापस आ जाता है. |
TNF_EXTERNAL_TYPE |
टाइप फ़ील्ड में मौजूद यूआरएन के आधार पर यूआरआई. URN को NDEF टाइप फ़ील्ड में,
छोटे फ़ॉर्मैट में एन्कोड किया जाता है: <domain_name>:<service_name> .
Android इसे इस फ़ॉर्मैट में यूआरआई पर मैप करता है:
vnd.android.nfc://ext/<domain_name>:<service_name> . |
TNF_MIME_MEDIA |
टाइप फ़ील्ड के आधार पर MIME टाइप. |
TNF_UNCHANGED |
पहले रिकॉर्ड में अमान्य है, इसलिए यह वैल्यू फिर से
ACTION_TECH_DISCOVERED पर सेट हो जाती है. |
TNF_UNKNOWN |
यह ACTION_TECH_DISCOVERED पर वापस आ जाता है. |
TNF_WELL_KNOWN |
MIME टाइप या यूआरआई, जो रिकॉर्ड टाइप डेफ़िनिशन (आरटीडी) के आधार पर तय होता है. इसे टाइप फ़ील्ड में सेट किया जाता है. उपलब्ध आरटीडी और उनकी मैपिंग के बारे में ज़्यादा जानकारी के लिए, टेबल 2 देखें. |
टेबल 2. TNF_WELL_KNOWN और उनकी मैपिंग के लिए काम करने वाले आरटीडी
रिकॉर्ड टाइप डेफ़िनिशन (आरटीडी) | मैपिंग |
---|---|
RTD_ALTERNATIVE_CARRIER |
यह ACTION_TECH_DISCOVERED पर वापस आ जाता है. |
RTD_HANDOVER_CARRIER |
यह ACTION_TECH_DISCOVERED पर वापस आ जाता है. |
RTD_HANDOVER_REQUEST |
यह ACTION_TECH_DISCOVERED पर वापस आ जाता है. |
RTD_HANDOVER_SELECT |
ACTION_TECH_DISCOVERED पर वापस आ जाता है. |
RTD_SMART_POSTER |
पेलोड को पार्स करने के आधार पर यूआरआई. |
RTD_TEXT |
text/plain का MIME टाइप. |
RTD_URI |
पेलोड के आधार पर यूआरआई. |
एनएफ़सी टैग को ऐप्लिकेशन पर डिस्पैच करने का तरीका
जब टैग डिस्पैच सिस्टम, एनएफ़सी टैग और उसकी पहचान करने वाली जानकारी को शामिल करने वाला इंटेंट बना लेता है, तो वह इंटेंट को उस ऐप्लिकेशन को भेजता है जिसमें दिलचस्पी है. यह ऐप्लिकेशन, इंटेंट को फ़िल्टर करता है. अगर इंटेंट को एक से ज़्यादा ऐप्लिकेशन हैंडल कर सकते हैं, तो गतिविधि चुनने वाला टूल दिखता है, ताकि उपयोगकर्ता गतिविधि चुन सके. टैग डिस्पैच सिस्टम, तीन इंटेंट तय करता है. इन्हें सबसे ज़्यादा से लेकर सबसे कम प्राथमिकता के क्रम में रखा जाता है:
-
ACTION_NDEF_DISCOVERED
: इस इंटेंट का इस्तेमाल, किसी गतिविधि को शुरू करने के लिए किया जाता है. ऐसा तब होता है, जब किसी ऐसे टैग को स्कैन किया जाता है जिसमें एनडीएफ़ पेलोड मौजूद हो और वह पहचाने गए टाइप का हो. यह सबसे ज़्यादा प्राथमिकता वाला इंटेंट है. जब भी संभव हो, तो टैग डिस्पैच सिस्टम किसी भी दूसरे इंटेंट से पहले इस इंटेंट की मदद से गतिविधि शुरू करने की कोशिश करता है.ध्यान दें: Android 16 से, यूआरएल लिंक (जैसे, यूआरआई स्कीम "htttps://" या "http://") सेव करने वाले एनएफ़सी टैग को स्कैन करने पर,
ACTION_NDEF_DISCOVERED
इंटेंट के बजायACTION_VIEW
इंटेंट ट्रिगर होगा. ACTION_TECH_DISCOVERED
: अगरACTION_NDEF_DISCOVERED
के मकसद को मैनेज करने के लिए कोई गतिविधि रजिस्टर नहीं की जाती है, तो टैग डिस्पैच सिस्टम इस मकसद के साथ कोई ऐप्लिकेशन शुरू करने की कोशिश करता है. अगर स्कैन किए गए टैग में ऐसा एनडीएफ़ डेटा है जिसे एमआईएम टाइप या यूआरआई पर मैप नहीं किया जा सकता है या टैग में एनडीएफ़ डेटा नहीं है, लेकिन वह किसी टैग टेक्नोलॉजी का है, तो यह इंटेंट सीधे तौर पर शुरू हो जाता है. इसके लिए,ACTION_NDEF_DISCOVERED
को शुरू करने की ज़रूरत नहीं होती.ACTION_TAG_DISCOVERED
: यह इंटेंट तब शुरू होता है, जब कोई भी गतिविधिACTION_NDEF_DISCOVERED
याACTION_TECH_DISCOVERED
इंटेंट को मैनेज न करती हो.
टैग डिस्पैच सिस्टम इस तरह काम करता है:
- एनएफ़सी टैग (
ACTION_NDEF_DISCOVERED
याACTION_TECH_DISCOVERED
) को पार्स करते समय, टैग डिस्पैच सिस्टम ने जो इंटेंट बनाया था उससे कोई गतिविधि शुरू करने की कोशिश करें. - अगर उस इंटेंट के लिए कोई गतिविधि फ़िल्टर नहीं होती है, तो अगली सबसे कम प्राथमिकता वाले इंटेंट (
ACTION_TECH_DISCOVERED
याACTION_TAG_DISCOVERED
) के साथ कोई गतिविधि शुरू करने की कोशिश करें. ऐसा तब तक करें, जब तक कोई ऐप्लिकेशन उस इंटेंट के लिए फ़िल्टर न कर दे या टैग डिस्पैच सिस्टम सभी संभावित इंटेंट आज़मा न दे. - अगर किसी भी इंटेंट के लिए कोई भी ऐप्लिकेशन फ़िल्टर नहीं करता है, तो कुछ भी न करें.

जब भी हो सके, NDEF मैसेज और ACTION_NDEF_DISCOVERED
इंटेंट का इस्तेमाल करें, क्योंकि यह तीनों में से सबसे सटीक है. इस इंटेंट की मदद से, अपने ऐप्लिकेशन को अन्य दो इंटेंट के मुकाबले ज़्यादा सही समय पर शुरू किया जा सकता है. इससे, उपयोगकर्ता को बेहतर अनुभव मिलता है.
Android मेनिफ़ेस्ट में एनएफ़सी के ऐक्सेस का अनुरोध करना
किसी डिवाइस के एनएफ़सी हार्डवेयर को ऐक्सेस करने और एनएफ़सी इंटेंट को सही तरीके से मैनेज करने से पहले, अपनी AndroidManifest.xml
फ़ाइल में इन आइटम के बारे में बताएं:
- एनएफ़सी हार्डवेयर को ऐक्सेस करने के लिए, एनएफ़सी
<uses-permission>
एलिमेंट:<uses-permission android:name="android.permission.NFC" />
- SDK टूल का वह कम से कम वर्शन जिस पर आपका ऐप्लिकेशन काम कर सकता है. एपीआई लेवल 9, सिर्फ़
ACTION_TAG_DISCOVERED
के ज़रिए सीमित टैग डिस्पैच के साथ काम करता है. साथ ही, सिर्फ़EXTRA_NDEF_MESSAGES
एक्सट्रा के ज़रिए एनडीएफ़ई मैसेज का ऐक्सेस देता है. कोई भी टैग प्रॉपर्टी या I/O ऑपरेशन ऐक्सेस नहीं किया जा सकता. एपीआई लेवल 10 में, रीडर/राइटर्स के साथ-साथ फ़ोरग्राउंड एनडीएफ़ पुश करने की सुविधा भी शामिल है. वहीं, एपीआई लेवल 14 में एनडीएफ़ रिकॉर्ड बनाने के लिए, ज़्यादा सुविधाजनक तरीके उपलब्ध हैं.<uses-sdk android:minSdkVersion="10"/>
uses-feature
एलिमेंट, ताकि आपका ऐप्लिकेशन Google Play पर सिर्फ़ उन डिवाइसों के लिए दिखे जिनमें एनएफ़सी हार्डवेयर है:<uses-feature android:name="android.hardware.nfc" android:required="true" />
अगर आपका ऐप्लिकेशन एनएफ़सी की सुविधा का इस्तेमाल करता है, लेकिन वह सुविधा आपके ऐप्लिकेशन के लिए ज़रूरी नहीं है, तो
uses-feature
एलिमेंट को हटाया जा सकता है. साथ ही, रनटाइम के दौरान एनएफ़सी की उपलब्धता की जांच की जा सकती है. इसके लिए, यह देखें किgetDefaultAdapter()
null
है या नहीं.
एनएफ़सी इंटेंट के लिए फ़िल्टर
अगर आपको किसी एनएफ़सी टैग को स्कैन करने पर अपना ऐप्लिकेशन शुरू करना है, तो आपका ऐप्लिकेशन, Android मेनिफ़ेस्ट में मौजूद तीनों एनएफ़सी इंटेंट में से एक, दो या तीनों को फ़िल्टर कर सकता है. हालांकि, आम तौर पर, आपको अपने ऐप्लिकेशन के शुरू होने के समय को पूरी तरह से कंट्रोल करने के लिए, ACTION_NDEF_DISCOVERED
इंटेंट के लिए फ़िल्टर करना होगा. ACTION_TECH_DISCOVERED
इंटेंट, ACTION_NDEF_DISCOVERED
के लिए फ़ॉलबैक होता है. ऐसा तब होता है, जब कोई भी ऐप्लिकेशन ACTION_NDEF_DISCOVERED
के लिए फ़िल्टर न करता हो या पेलोड NDEF न हो. आम तौर पर, ACTION_TAG_DISCOVERED
के लिए फ़िल्टर करना, बहुत सामान्य कैटगरी होती है. कई ऐप्लिकेशन, ACTION_TAG_DISCOVERED
से पहले ACTION_NDEF_DISCOVERED
या ACTION_TECH_DISCOVERED
के लिए फ़िल्टर करेंगे. इसलिए, आपके ऐप्लिकेशन के शुरू होने की संभावना कम है. ACTION_TAG_DISCOVERED
सिर्फ़ ऐप्लिकेशन के लिए, आखिरी विकल्प के तौर पर उपलब्ध है. इसका इस्तेमाल तब किया जाता है, जब ACTION_NDEF_DISCOVERED
या ACTION_TECH_DISCOVERED
इंटेंट को मैनेज करने के लिए कोई दूसरा ऐप्लिकेशन इंस्टॉल न हो.
एनएफ़सी टैग को अलग-अलग तरह से डिप्लॉय किया जाता है और कई बार यह आपके कंट्रोल में नहीं होता. इसलिए, ऐसा करना हमेशा संभव नहीं होता. ज़रूरत पड़ने पर, दो अन्य इंटेंट का इस्तेमाल किया जा सकता है. अगर आपके पास टैग के टाइप और लिखे गए डेटा पर कंट्रोल है, तो हमारा सुझाव है कि आप अपने टैग को फ़ॉर्मैट करने के लिए NDEF का इस्तेमाल करें. नीचे दिए गए सेक्शन में, हर तरह के इंटेंट को फ़िल्टर करने का तरीका बताया गया है.
ACTION_NDEF_DISCOVERED
ACTION_NDEF_DISCOVERED
इंटेंट के लिए फ़िल्टर करने के लिए, उस डेटा टाइप के साथ इंटेंट फ़िल्टर का एलान करें जिसके लिए आपको फ़िल्टर करना है. यहां दिए गए उदाहरण में, text/plain
MIME टाइप वाले ACTION_NDEF_DISCOVERED
इंटेंट को फ़िल्टर किया गया है:
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain" /> </intent-filter>
यहां दिए गए उदाहरण में, https://developer.android.com/index.html
के तौर पर यूआरआई को फ़िल्टर किया गया है.
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="https" android:host="developer.android.com" android:pathPrefix="/index.html" /> </intent-filter>
ACTION_TECH_DISCOVERED
अगर आपकी गतिविधि, ACTION_TECH_DISCOVERED
इंटेंट के लिए फ़िल्टर करती है, तो आपको एक एक्सएमएल रिसॉर्स फ़ाइल बनानी होगी. इसमें उन टेक्नोलॉजी के बारे में बताया जाना चाहिए जिन पर आपकी गतिविधि, tech-list
सेट में काम करती है. अगर tech-list
सेट, उन टेक्नोलॉजी का सबसेट है जिन पर टैग काम करता है, तो आपकी गतिविधि को मैच माना जाता है. getTechList()
को कॉल करके, इन टेक्नोलॉजी के बारे में पता लगाया जा सकता है.
उदाहरण के लिए, अगर स्कैन किया गया टैग MifareClassic, NdefFormatable, और NfcA के साथ काम करता है, तो आपकी गतिविधि का मिलान करने के लिए, आपके tech-list
सेट में तीनों, दो या एक टेक्नोलॉजी (और कुछ और नहीं) के बारे में बताया जाना चाहिए.
यहां दिए गए सैंपल में सभी टेक्नोलॉजी के बारे में बताया गया है. आपको उन टैग को हटाना होगा जो आपके एनएफ़सी टैग पर काम नहीं करते. इस फ़ाइल को <project-root>/res/xml
फ़ोल्डर में सेव करें. इसे अपनी पसंद का कोई भी नाम दिया जा सकता है.
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.IsoDep</tech> <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.NfcB</tech> <tech>android.nfc.tech.NfcF</tech> <tech>android.nfc.tech.NfcV</tech> <tech>android.nfc.tech.Ndef</tech> <tech>android.nfc.tech.NdefFormatable</tech> <tech>android.nfc.tech.MifareClassic</tech> <tech>android.nfc.tech.MifareUltralight</tech> </tech-list> </resources>
एक से ज़्यादा tech-list
सेट भी तय किए जा सकते हैं. हर tech-list
सेट को अलग से माना जाता है. अगर कोई एक
tech-list
सेट, getTechList()
से मिलने वाली टेक्नोलॉजी का सबसेट है, तो आपकी गतिविधि को मैच माना जाता है. इससे, मैच करने वाली टेक्नोलॉजी के लिए AND
और OR
के ज़रिए सेमेनटिक्स मिलता है. यहां दिए गए उदाहरण में, ऐसे टैग से मैच किया जाता है जो
NfcA और Ndef टेक्नोलॉजी के साथ काम कर सकते हैं या NfcB और Ndef टेक्नोलॉजी के साथ काम कर सकते हैं:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.Ndef</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcB</tech> <tech>android.nfc.tech.Ndef</tech> </tech-list> </resources>
अपनी AndroidManifest.xml
फ़ाइल में, <activity>
एलिमेंट के अंदर <meta-data>
एलिमेंट में, वह संसाधन फ़ाइल डालें जो आपने अभी बनाई है. उदाहरण के लिए:
<activity> ... <intent-filter> <action android:name="android.nfc.action.TECH_DISCOVERED"/> </intent-filter> <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_filter" /> ... </activity>
टैग टेक्नोलॉजी और ACTION_TECH_DISCOVERED
इंटेंट के साथ काम करने के बारे में ज़्यादा जानकारी के लिए, बेहतर एनएफ़सी दस्तावेज़ में काम करने वाली टैग टेक्नोलॉजी के साथ काम करना देखें.
ACTION_TAG_DISCOVERED
ACTION_TAG_DISCOVERED
के लिए फ़िल्टर करने के लिए, नीचे दिए गए इंटेंट फ़िल्टर का इस्तेमाल करें:
<intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED"/> </intent-filter>
ACTION_VIEW
Android 16 से, यूआरएल लिंक सेव करने वाले एनएफ़सी टैग को स्कैन करने पर, ACTION_VIEW
इंटेंट ट्रिगर होगा. ACTION_VIEW
के लिए फ़िल्टर करने के लिए, this
देखें. यूआरएल के लिए अपना ऐप्लिकेशन खोलने के लिए, Android app links
का इस्तेमाल करें.
इंटेंट से जानकारी पाना
अगर कोई गतिविधि एनएफ़सी इंटेंट की वजह से शुरू होती है, तो इंटेंट से स्कैन किए गए एनएफ़सी टैग के बारे में जानकारी मिल सकती है. स्कैन किए गए टैग के आधार पर, इंटेंट में ये अतिरिक्त चीज़ें शामिल हो सकती हैं:
EXTRA_TAG
(ज़रूरी है): स्कैन किए गए टैग को दिखाने वालाTag
ऑब्जेक्ट.EXTRA_NDEF_MESSAGES
(ज़रूरी नहीं): टैग से पार्स किए गए NDEF मैसेज का कलेक्शन.ACTION_NDEF_DISCOVERED
इंटेंट के लिए, यह अतिरिक्त एट्रिब्यूट ज़रूरी है.EXTRA_ID
(ज़रूरी नहीं): टैग का लो-लेवल आईडी.
इन अतिरिक्त जानकारी को पाने के लिए, देखें कि आपकी गतिविधि को एनएफ़सी इंटेंट में से किसी एक के साथ लॉन्च किया गया था या नहीं. इससे यह पक्का किया जा सकेगा कि टैग को स्कैन किया गया था. इसके बाद, इंटेंट से अतिरिक्त जानकारी पाएं. नीचे दिया गया उदाहरण, ACTION_NDEF_DISCOVERED
के इंटेंट की जांच करता है और इंटेंट एक्सट्रा से NDEF मैसेज पाता है.
Kotlin
override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) ... if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) { intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)?.also { rawMessages -> val messages: List<NdefMessage> = rawMessages.map { it as NdefMessage } // Process the messages array. ... } } }
Java
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); ... if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMessages != null) { NdefMessage[] messages = new NdefMessage[rawMessages.length]; for (int i = 0; i < rawMessages.length; i++) { messages[i] = (NdefMessage) rawMessages[i]; } // Process the messages array. ... } } }
इसके अलावा, इंटेंट से Tag
ऑब्जेक्ट भी पाया जा सकता है. इसमें पेलोड शामिल होगा और आपको टैग की टेक्नोलॉजी की जानकारी भी मिलेगी:
Kotlin
val tag: Tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)
Java
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
सामान्य तौर पर इस्तेमाल होने वाले NDEF रिकॉर्ड बनाना
इस सेक्शन में, आम तौर पर इस्तेमाल होने वाले NDEF रिकॉर्ड बनाने का तरीका बताया गया है. इससे आपको एनएफ़सी टैग में जानकारी लिखने में मदद मिलेगी. Android 4.0 (एपीआई लेवल 14) से, createUri()
तरीका उपलब्ध है. इससे यूआरआई रिकॉर्ड अपने-आप बनने में मदद मिलती है. Android 4.1 (एपीआई लेवल 16) से, createExternal()
और createMime()
उपलब्ध हैं. इनकी मदद से, MIME और बाहरी टाइप के एनडीएफ़ रिकॉर्ड बनाए जा सकते हैं. मैन्युअल तरीके से एनडीएफ़ रिकॉर्ड बनाते समय, गड़बड़ियों से बचने के लिए, जब भी हो सके इन सहायक तरीकों का इस्तेमाल करें.
इस सेक्शन में, रिकॉर्ड के लिए मिलते-जुलते इंटेंट फ़िल्टर बनाने का तरीका भी बताया गया है. इन सभी NDEF रिकॉर्ड के उदाहरण, उस NDEF मैसेज के पहले NDEF रिकॉर्ड में होने चाहिए जिसे टैग में लिखा जा रहा है.
TNF_ABSOLUTE_URI
ध्यान दें: हमारा सुझाव है कि आप TNF_ABSOLUTE_URI
के बजाय,
RTD_URI
टाइप का इस्तेमाल करें, क्योंकि यह ज़्यादा असरदार है.
TNF_ABSOLUTE_URI
NDEF रिकॉर्ड बनाने के लिए, यह तरीका अपनाएं
:
Kotlin
val uriRecord = ByteArray(0).let { emptyByteArray -> NdefRecord( TNF_ABSOLUTE_URI, "https://developer.android.com/index.html".toByteArray(Charset.forName("US-ASCII")), emptyByteArray, emptyByteArray ) }
Java
NdefRecord uriRecord = new NdefRecord( NdefRecord.TNF_ABSOLUTE_URI , "https://developer.android.com/index.html".getBytes(Charset.forName("US-ASCII")), new byte[0], new byte[0]);
पिछले NDEF रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="https" android:host="developer.android.com" android:pathPrefix="/index.html" /> </intent-filter>
TNF_MIME_MEDIA
TNF_MIME_MEDIA
NDEF रिकॉर्ड बनाने के लिए, ये तरीके अपनाए जा सकते हैं:
createMime()
वाले तरीके का इस्तेमाल करके:
Kotlin
val mimeRecord = NdefRecord.createMime( "application/vnd.com.example.android.beam", "Beam me up, Android".toByteArray(Charset.forName("US-ASCII")) )
Java
NdefRecord mimeRecord = NdefRecord.createMime("application/vnd.com.example.android.beam", "Beam me up, Android".getBytes(Charset.forName("US-ASCII")));
NdefRecord
को मैन्युअल तरीके से बनाना:
Kotlin
val mimeRecord = Charset.forName("US-ASCII").let { usAscii -> NdefRecord( NdefRecord.TNF_MIME_MEDIA, "application/vnd.com.example.android.beam".toByteArray(usAscii), ByteArray(0), "Beam me up, Android!".toByteArray(usAscii) ) }
Java
NdefRecord mimeRecord = new NdefRecord( NdefRecord.TNF_MIME_MEDIA , "application/vnd.com.example.android.beam".getBytes(Charset.forName("US-ASCII")), new byte[0], "Beam me up, Android!".getBytes(Charset.forName("US-ASCII")));
पिछले NDEF रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/vnd.com.example.android.beam" /> </intent-filter>
RTD_TEXT के साथ TNF_WELL_KNOWN
TNF_WELL_KNOWN
NDEF रिकॉर्ड बनाने के लिए, यह तरीका अपनाएं:
Kotlin
fun createTextRecord(payload: String, locale: Locale, encodeInUtf8: Boolean): NdefRecord { val langBytes = locale.language.toByteArray(Charset.forName("US-ASCII")) val utfEncoding = if (encodeInUtf8) Charset.forName("UTF-8") else Charset.forName("UTF-16") val textBytes = payload.toByteArray(utfEncoding) val utfBit: Int = if (encodeInUtf8) 0 else 1 shl 7 val status = (utfBit + langBytes.size).toChar() val data = ByteArray(1 + langBytes.size + textBytes.size) data[0] = status.toByte() System.arraycopy(langBytes, 0, data, 1, langBytes.size) System.arraycopy(textBytes, 0, data, 1 + langBytes.size, textBytes.size) return NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, ByteArray(0), data) }
Java
public NdefRecord createTextRecord(String payload, Locale locale, boolean encodeInUtf8) { byte[] langBytes = locale.getLanguage().getBytes(Charset.forName("US-ASCII")); Charset utfEncoding = encodeInUtf8 ? Charset.forName("UTF-8") : Charset.forName("UTF-16"); byte[] textBytes = payload.getBytes(utfEncoding); int utfBit = encodeInUtf8 ? 0 : (1 << 7); char status = (char) (utfBit + langBytes.length); byte[] data = new byte[1 + langBytes.length + textBytes.length]; data[0] = (byte) status; System.arraycopy(langBytes, 0, data, 1, langBytes.length); System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length); NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], data); return record; }
पिछले NDEF रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter>
RTD_URI के साथ TNF_WELL_KNOWN
TNF_WELL_KNOWN
NDEF रिकॉर्ड बनाने के लिए, ये तरीके अपनाए जा सकते हैं:
createUri(String)
वाले तरीके का इस्तेमाल करके:
Kotlin
val rtdUriRecord1 = NdefRecord.createUri("https://example.com")
Java
NdefRecord rtdUriRecord1 = NdefRecord.createUri("https://example.com");
createUri(Uri)
वाले तरीके का इस्तेमाल करके:
Kotlin
val rtdUriRecord2 = Uri.parse("https://example.com").let { uri -> NdefRecord.createUri(uri) }
Java
Uri uri = Uri.parse("https://example.com"); NdefRecord rtdUriRecord2 = NdefRecord.createUri(uri);
NdefRecord
को मैन्युअल तरीके से बनाना:
Kotlin
val uriField = "example.com".toByteArray(Charset.forName("US-ASCII")) val payload = ByteArray(uriField.size + 1) //add 1 for the URI Prefix payload [0] = 0x01 //prefixes https://www. to the URI System.arraycopy(uriField, 0, payload, 1, uriField.size) //appends URI to payload val rtdUriRecord = NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, ByteArray(0), payload)
Java
byte[] uriField = "example.com".getBytes(Charset.forName("US-ASCII")); byte[] payload = new byte[uriField.length + 1]; //add 1 for the URI Prefix payload[0] = 0x01; //prefixes https://www. to the URI System.arraycopy(uriField, 0, payload, 1, uriField.length); //appends URI to payload NdefRecord rtdUriRecord = new NdefRecord( NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload);
पिछले NDEF रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="https" android:host="example.com" android:pathPrefix="" /> </intent-filter>
TNF_EXTERNAL_TYPE
TNF_EXTERNAL_TYPE
NDEF रिकॉर्ड बनाने के लिए, ये तरीके अपनाए जा सकते हैं:
createExternal()
वाले तरीके का इस्तेमाल करके:
Kotlin
var payload: ByteArray //assign to your data val domain = "com.example" //usually your app's package name val type = "externalType" val extRecord = NdefRecord.createExternal(domain, type, payload)
Java
byte[] payload; //assign to your data String domain = "com.example"; //usually your app's package name String type = "externalType"; NdefRecord extRecord = NdefRecord.createExternal(domain, type, payload);
NdefRecord
को मैन्युअल तरीके से बनाना:
Kotlin
var payload: ByteArray ... val extRecord = NdefRecord( NdefRecord.TNF_EXTERNAL_TYPE, "com.example:externalType".toByteArray(Charset.forName("US-ASCII")), ByteArray(0), payload )
Java
byte[] payload; ... NdefRecord extRecord = new NdefRecord( NdefRecord.TNF_EXTERNAL_TYPE, "com.example:externalType".getBytes(Charset.forName("US-ASCII")), new byte[0], payload);
पिछले NDEF रिकॉर्ड के लिए इंटेंट फ़िल्टर कुछ ऐसा दिखेगा:
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="vnd.android.nfc" android:host="ext" android:pathPrefix="/com.example:externalType"/> </intent-filter>
TNF_EXTERNAL_TYPE
का इस्तेमाल करके, एनएफ़सी टैग को सामान्य तौर पर डिप्लॉय करें. इससे, Android और Android के अलावा दूसरे डिवाइसों पर भी बेहतर तरीके से काम किया जा सकेगा.
ध्यान दें: TNF_EXTERNAL_TYPE
के लिए यूआरएन का कैननिकल फ़ॉर्मैट यह है:
urn:nfc:ext:example.com:externalType
. हालांकि, एनएफ़सी फ़ोरम आरटीडी स्पेसिफ़िकेशन में बताया गया है कि यूआरएन के urn:nfc:ext:
हिस्से को एनडीएफ़ रिकॉर्ड से हटा दिया जाना चाहिए. इसलिए, आपको सिर्फ़ डोमेन (उदाहरण में example.com
) और टाइप (उदाहरण में externalType
) की जानकारी देनी होगी. इन दोनों को कोलन लगाकर अलग किया जाना चाहिए.
TNF_EXTERNAL_TYPE
डिस्पैच करते समय, Android urn:nfc:ext:example.com:externalType
यूआरएन को vnd.android.nfc://ext/example.com:externalType
यूआरआई में बदल देता है. उदाहरण में, इंटेंट फ़िल्टर यही बताता है.
Android ऐप्लिकेशन के रिकॉर्ड
Android 4.0 (एपीआई लेवल 14) में लॉन्च किया गया Android ऐप्लिकेशन रिकॉर्ड (एएआर), इस बात की ज़्यादा पुष्टि करता है कि एनएफ़सी टैग स्कैन होने पर आपका ऐप्लिकेशन शुरू हो जाएगा. किसी AAR में, NDEF रिकॉर्ड में एम्बेड किए गए ऐप्लिकेशन का पैकेज नाम होता है. अपने एनडीएफ़ मैसेज के किसी भी एनडीएफ़ रिकॉर्ड में एएआर जोड़ा जा सकता है, क्योंकि Android पूरे एनडीएफ़ मैसेज में एएआर खोजता है. अगर उसे कोई AAR मिलता है, तो वह AAR में मौजूद पैकेज के नाम के आधार पर ऐप्लिकेशन को शुरू करता है. अगर ऐप्लिकेशन डिवाइस पर मौजूद नहीं है, तो ऐप्लिकेशन डाउनलोड करने के लिए Google Play लॉन्च किया जाता है.
अगर आपको अन्य ऐप्लिकेशन को उसी इंटेंट के लिए फ़िल्टर करने से रोकना है और आपके डिप्लॉय किए गए खास टैग को मैनेज करने से रोकना है, तो एएआर आपके काम के हैं. पैकेज के नाम से जुड़ी पाबंदी की वजह से, एएआर सिर्फ़ ऐप्लिकेशन लेवल पर काम करते हैं. ये गतिविधि के लेवल पर काम नहीं करते, जैसे कि इंटेंट फ़िल्टरिंग की सुविधा. अगर आपको गतिविधि के लेवल पर किसी इंटेंट को मैनेज करना है, तो इंटेंट फ़िल्टर का इस्तेमाल करें.
अगर किसी टैग में AAR है, तो टैग डिस्पैच सिस्टम इस तरीके से डिस्पैच करता है:
- सामान्य तौर पर, इंटेंट फ़िल्टर का इस्तेमाल करके कोई गतिविधि शुरू करने की कोशिश करें. अगर इंटेंट से मैच करने वाली गतिविधि, AAR से भी मैच करती है, तो गतिविधि शुरू करें.
- अगर इंटेंट के लिए फ़िल्टर करने वाली गतिविधि, एएआर से मेल नहीं खाती है, अगर इंटेंट को एक से ज़्यादा गतिविधियां हैंडल कर सकती हैं या अगर कोई भी गतिविधि इंटेंट को हैंडल नहीं करती है, तो एएआर से बताए गए ऐप्लिकेशन को शुरू करें.
- अगर कोई भी ऐप्लिकेशन AAR से शुरू नहीं हो पा रहा है, तो AAR के आधार पर ऐप्लिकेशन डाउनलोड करने के लिए Google Play पर जाएं.
ध्यान दें: फ़ोरग्राउंड डिस्पैच सिस्टम की मदद से, एएआर और इंटेंट डिस्पैच सिस्टम को बदला जा सकता है. इससे, एनएफ़सी टैग का पता चलने पर, फ़ोरग्राउंड गतिविधि को प्राथमिकता दी जा सकती है. इस तरीके से, गतिविधि को फ़ोरग्राउंड में होना चाहिए, ताकि एएआर और इंटेंट डिस्पैच सिस्टम को बदला जा सके.
अगर आपको अब भी ऐसे स्कैन किए गए टैग को फ़िल्टर करना है जिनमें एएआर नहीं है, तो इंटेंट फ़िल्टर को सामान्य के तौर पर दिखाया जा सकता है. यह तब काम आता है, जब आपके ऐप्लिकेशन को ऐसे अन्य टैग में दिलचस्पी हो जिनमें AAR शामिल न हो. उदाहरण के लिए, हो सकता है कि आपको यह पक्का करना हो कि आपका ऐप्लिकेशन, आपके डिप्लॉय किए गए मालिकाना टैग के साथ-साथ तीसरे पक्ष के डिप्लॉय किए गए सामान्य टैग को भी मैनेज करता है. ध्यान रखें कि AAR, Android 4.0 या उसके बाद के वर्शन वाले डिवाइसों के लिए ही हैं. इसलिए, टैग डिप्लॉय करते समय, ज़्यादा से ज़्यादा डिवाइसों के साथ काम करने के लिए, AAR और MIME टाइप/यूआरआई के कॉम्बिनेशन का इस्तेमाल करें. इसके अलावा, एनएफ़सी टैग डिप्लॉय करते समय, इस बात पर ध्यान दें कि आपको अपने एनएफ़सी टैग को कैसे लिखना है, ताकि ज़्यादा से ज़्यादा डिवाइसों (Android और अन्य डिवाइसों) के लिए सहायता चालू की जा सके. ऐसा करने के लिए, एक यूनीक MIME टाइप या यूआरआई तय करें, ताकि ऐप्लिकेशन आसानी से इनके बीच अंतर कर सकें.
Android, AAR बनाने के लिए एक आसान एपीआई उपलब्ध कराता है,
createApplicationRecord()
. इसके लिए, आपको अपने NdefMessage
में कहीं भी AAR को एम्बेड करना होगा. आपको अपने NdefMessage
के पहले रिकॉर्ड का इस्तेमाल नहीं करना है. ऐसा तब तक नहीं किया जा सकता, जब तक कि NdefMessage
में सिर्फ़ AAR रिकॉर्ड मौजूद न हो. ऐसा इसलिए होता है, क्योंकि Android सिस्टम, टैग के MIME टाइप या यूआरआई का पता लगाने के लिए, NdefMessage
के पहले रिकॉर्ड की जांच करता है. इसका इस्तेमाल, ऐप्लिकेशन को फ़िल्टर करने के लिए इंटेंट बनाने के लिए किया जाता है. यहां दिए गए कोड से, आपको AAR बनाने का तरीका पता चलेगा:
Kotlin
val msg = NdefMessage( arrayOf( ..., NdefRecord.createApplicationRecord("com.example.android.beam") ) )
Java
NdefMessage msg = new NdefMessage( new NdefRecord[] { ..., NdefRecord.createApplicationRecord("com.example.android.beam")} ); )
एनएफ़सी टैग स्कैन करने के लिए, ऐप्लिकेशन की अनुमति वाली सूची
Android 16 से, जब किसी ऐप्लिकेशन को एनएफ़सी टैग स्कैन करने के लिए पहला एनएफ़सी इंटेंट मिलता है, तो उपयोगकर्ताओं को इसकी सूचना दी जाती है. उपयोगकर्ता को सूचना में, ऐप्लिकेशन को एनएफ़सी टैग स्कैन करने से रोकने का विकल्प दिया जाता है.
- ऐप्लिकेशन यह जांच कर सकते हैं कि उपयोगकर्ता ने ऐप्लिकेशन को
NfcAdapter.isTagIntentAllowed()
का इस्तेमाल करके, एनएफ़सी टैग स्कैन करने की अनुमति दी है या नहीं. - ऐप्लिकेशन, इंटेंट भेजकर उपयोगकर्ता को एनएफ़सी टैग को फिर से स्कैन करने की अनुमति देने के लिए कह सकते हैं
ACTION_CHANGE_TAG_INTENT_PREFERENCE
.
ध्यान दें: एनएफ़सी टैग स्कैन करने की अनुमति वाले ऐप्लिकेशन की सूची, Settings > Apps > Special app access > Launch via NFC
में जाकर देखी जा सकती है.