NFC বেসিক

এই ডকুমেন্টটি অ্যান্ড্রয়েডে আপনার সম্পাদিত মৌলিক NFC কাজগুলি বর্ণনা করে। এটি NDEF বার্তা আকারে NFC ডেটা কীভাবে প্রেরণ এবং গ্রহণ করতে হয় তা ব্যাখ্যা করে এবং এই বৈশিষ্ট্যগুলিকে সমর্থন করে এমন Android ফ্রেমওয়ার্ক API গুলি বর্ণনা করে। NDEF-বহির্ভূত ডেটা নিয়ে কাজ করার আলোচনা সহ আরও উন্নত বিষয়গুলির জন্য, উন্নত NFC দেখুন।

একটি NFC ট্যাগ থেকে NDEF ডেটা পড়া ট্যাগ ডিসপ্যাচ সিস্টেমের মাধ্যমে পরিচালিত হয়, যা আবিষ্কৃত NFC ট্যাগগুলি বিশ্লেষণ করে, যথাযথভাবে ডেটা শ্রেণীবদ্ধ করে এবং এমন একটি অ্যাপ্লিকেশন শুরু করে যা শ্রেণীবদ্ধ ডেটাতে আগ্রহী। স্ক্যান করা NFC ট্যাগটি পরিচালনা করতে চায় এমন একটি অ্যাপ্লিকেশন একটি ইন্টেন্ট ফিল্টার ঘোষণা করতে পারে এবং ডেটা পরিচালনা করার জন্য অনুরোধ করতে পারে।

ট্যাগ প্রেরণ ব্যবস্থা

অ্যান্ড্রয়েড-চালিত ডিভাইসগুলি সাধারণত স্ক্রিন আনলক থাকা অবস্থায় NFC ট্যাগ খোঁজে, যদি না ডিভাইসের সেটিংস মেনুতে NFC অক্ষম করা থাকে। যখন একটি অ্যান্ড্রয়েড-চালিত ডিভাইস একটি NFC ট্যাগ আবিষ্কার করে, তখন কাঙ্ক্ষিত আচরণ হল ব্যবহারকারীকে কোন অ্যাপ্লিকেশন ব্যবহার করতে হবে তা জিজ্ঞাসা না করেই সবচেয়ে উপযুক্ত কার্যকলাপটি উদ্দেশ্যটি পরিচালনা করা। যেহেতু ডিভাইসগুলি খুব কম পরিসরে NFC ট্যাগ স্ক্যান করে, তাই সম্ভবত ব্যবহারকারীদের ম্যানুয়ালি একটি কার্যকলাপ নির্বাচন করতে বাধ্য করা তাদের ট্যাগ থেকে ডিভাইসটি সরিয়ে নিতে এবং সংযোগ বিচ্ছিন্ন করতে বাধ্য করবে। আপনার কার্যকলাপটি কেবলমাত্র সেই NFC ট্যাগগুলি পরিচালনা করার জন্য তৈরি করা উচিত যা আপনার কার্যকলাপ যত্ন করে যাতে অ্যাক্টিভিটি চয়নকারী প্রদর্শিত না হয়।

এই লক্ষ্যে আপনাকে সাহায্য করার জন্য, অ্যান্ড্রয়েড একটি বিশেষ ট্যাগ ডিসপ্যাচ সিস্টেম প্রদান করে যা স্ক্যান করা NFC ট্যাগ বিশ্লেষণ করে, সেগুলিকে পার্স করে এবং স্ক্যান করা ডেটাতে আগ্রহী অ্যাপ্লিকেশনগুলি সনাক্ত করার চেষ্টা করে। এটি এটি করে:

  1. NFC ট্যাগ পার্স করা এবং MIME টাইপ বা ট্যাগে থাকা ডেটা পেলোড সনাক্তকারী URI বের করা।
  2. MIME টাইপ বা URI এবং পেলোডকে একটি ইনটেন্টে অন্তর্ভুক্ত করা। এই প্রথম দুটি ধাপ NFC ট্যাগগুলিকে MIME টাইপ এবং URI-তে কীভাবে ম্যাপ করা হয় তা বর্ণনা করা হয়েছে।
  3. উদ্দেশ্যের উপর ভিত্তি করে একটি কার্যকলাপ শুরু করে। এটি "কীভাবে NFC ট্যাগগুলি অ্যাপ্লিকেশনগুলিতে প্রেরণ করা হয়" বিভাগে বর্ণনা করা হয়েছে।

MIME প্রকার এবং URI-তে NFC ট্যাগগুলি কীভাবে ম্যাপ করা হয়

আপনার NFC অ্যাপ্লিকেশন লেখা শুরু করার আগে, বিভিন্ন ধরণের NFC ট্যাগ, ট্যাগ ডিসপ্যাচ সিস্টেম কীভাবে NFC ট্যাগ পার্স করে এবং NDEF বার্তা সনাক্ত করার সময় ট্যাগ ডিসপ্যাচ সিস্টেম যে বিশেষ কাজ করে তা বোঝা গুরুত্বপূর্ণ। NFC ট্যাগগুলি বিভিন্ন ধরণের প্রযুক্তিতে আসে এবং বিভিন্ন উপায়ে তাদের কাছে ডেটা লেখাও হতে পারে। NFC ফোরাম দ্বারা সংজ্ঞায়িত NDEF স্ট্যান্ডার্ডের জন্য অ্যান্ড্রয়েড সর্বাধিক সমর্থন করে।

NDEF ডেটা একটি বার্তার ( NdefMessage ) ভেতরে থাকে যাতে এক বা একাধিক রেকর্ড ( NdefRecord ) থাকে। প্রতিটি NDEF রেকর্ড অবশ্যই আপনি যে ধরণের রেকর্ড তৈরি করতে চান তার স্পেসিফিকেশন অনুসারে সুগঠিত হতে হবে। Android অন্যান্য ধরণের ট্যাগগুলিকেও সমর্থন করে যেখানে NDEF ডেটা থাকে না, যেগুলি আপনি android.nfc.tech প্যাকেজের ক্লাসগুলি ব্যবহার করে ব্যবহার করতে পারেন। এই প্রযুক্তিগুলি সম্পর্কে আরও জানতে, উন্নত NFC বিষয় দেখুন। এই অন্যান্য ধরণের ট্যাগগুলির সাথে কাজ করার জন্য ট্যাগগুলির সাথে যোগাযোগ করার জন্য আপনার নিজস্ব প্রোটোকল স্ট্যাক লেখা জড়িত, তাই আমরা বিকাশের সহজতা এবং Android-চালিত ডিভাইসগুলির জন্য সর্বাধিক সমর্থনের জন্য সম্ভব হলে NDEF ব্যবহার করার পরামর্শ দিই।

দ্রষ্টব্য: সম্পূর্ণ NDEF স্পেসিফিকেশন ডাউনলোড করতে, NFC ফোরাম স্পেসিফিকেশন এবং অ্যাপ্লিকেশন ডকুমেন্টস সাইটে যান এবং NDEF রেকর্ড কীভাবে তৈরি করবেন তার উদাহরণের জন্য সাধারণ ধরণের NDEF রেকর্ড তৈরি করা দেখুন।

এখন যেহেতু আপনার NFC ট্যাগ সম্পর্কে কিছু ধারণা আছে, তাই নিম্নলিখিত বিভাগগুলিতে Android NDEF ফর্ম্যাট করা ট্যাগগুলি কীভাবে পরিচালনা করে তা আরও বিশদে বর্ণনা করা হয়েছে। যখন একটি Android-চালিত ডিভাইস NDEF ফর্ম্যাট করা ডেটা ধারণকারী NFC ট্যাগ স্ক্যান করে, তখন এটি বার্তাটি বিশ্লেষণ করে এবং ডেটার MIME প্রকার বা URI সনাক্তকরণ বের করার চেষ্টা করে। এটি করার জন্য, সিস্টেমটি NdefMessage ভিতরে প্রথম NdefRecord পড়ে সম্পূর্ণ NDEF বার্তাটি কীভাবে ব্যাখ্যা করতে হয় তা নির্ধারণ করে (একটি NDEF বার্তায় একাধিক NDEF রেকর্ড থাকতে পারে)। একটি সুগঠিত NDEF বার্তায়, প্রথম NdefRecord নিম্নলিখিত ক্ষেত্রগুলি থাকে:

৩-বিট TNF (টাইপ নেম ফর্ম্যাট)
চলক দৈর্ঘ্যের ধরণ ক্ষেত্রটি কীভাবে ব্যাখ্যা করতে হয় তা নির্দেশ করে। বৈধ মানগুলি সারণি 1 এ বর্ণিত হয়েছে।
পরিবর্তনশীল দৈর্ঘ্যের ধরণ
রেকর্ডের ধরণ বর্ণনা করে। যদি TNF_WELL_KNOWN ব্যবহার করেন, তাহলে রেকর্ডের ধরণ সংজ্ঞা (RTD) নির্দিষ্ট করতে এই ক্ষেত্রটি ব্যবহার করুন। বৈধ RTD মানগুলি সারণি 2 এ বর্ণিত হয়েছে।
পরিবর্তনশীল দৈর্ঘ্যের আইডি
রেকর্ডের জন্য একটি অনন্য শনাক্তকারী। এই ক্ষেত্রটি প্রায়শই ব্যবহৃত হয় না, তবে যদি আপনার কোনও ট্যাগকে অনন্যভাবে সনাক্ত করার প্রয়োজন হয়, তাহলে আপনি এটির জন্য একটি আইডি তৈরি করতে পারেন।
পরিবর্তনশীল দৈর্ঘ্যের পেলোড
আপনি যে প্রকৃত ডেটা পেলোডটি পড়তে বা লিখতে চান। একটি NDEF বার্তায় একাধিক NDEF রেকর্ড থাকতে পারে, তাই ধরে নিবেন না যে সম্পূর্ণ পেলোডটি NDEF বার্তার প্রথম NDEF রেকর্ডে রয়েছে।

ট্যাগ ডিসপ্যাচ সিস্টেমটি TNF এবং টাইপ ফিল্ড ব্যবহার করে NDEF বার্তায় একটি MIME টাইপ বা URI ম্যাপ করার চেষ্টা করে। যদি সফল হয়, তাহলে এটি ACTION_NDEF_DISCOVERED ইনটেন্টের ভিতরে সেই তথ্যকে প্রকৃত পেলোডের সাথে অন্তর্ভুক্ত করে। তবে, এমন কিছু ক্ষেত্রে আছে যখন ট্যাগ ডিসপ্যাচ সিস্টেম প্রথম NDEF রেকর্ডের উপর ভিত্তি করে ডেটার ধরণ নির্ধারণ করতে পারে না। এটি তখন ঘটে যখন NDEF ডেটা MIME টাইপ বা URI-তে ম্যাপ করা যায় না, অথবা যখন NFC ট্যাগে NDEF ডেটা থাকে না। এই ধরনের ক্ষেত্রে, ট্যাগের প্রযুক্তি এবং পেলোড সম্পর্কে তথ্য থাকা একটি Tag অবজেক্টকে ACTION_TECH_DISCOVERED ইনটেন্টের ভিতরে অন্তর্ভুক্ত করা হয়।

টেবিল ১ বর্ণনা করে কিভাবে ট্যাগ ডিসপ্যাচ সিস্টেম TNF এবং টাইপ ফিল্ডগুলিকে MIME টাইপ বা URI তে ম্যাপ করে। এটি আরও বর্ণনা করে যে কোন TNF গুলিকে MIME টাইপ বা URI তে ম্যাপ করা যাবে না। এই ক্ষেত্রে, ট্যাগ ডিসপ্যাচ সিস্টেমটি ACTION_TECH_DISCOVERED তে ফিরে আসে।

উদাহরণস্বরূপ, যদি ট্যাগ ডিসপ্যাচ সিস্টেমটি TNF_ABSOLUTE_URI ধরণের কোনও রেকর্ডের মুখোমুখি হয়, তবে এটি সেই রেকর্ডের পরিবর্তনশীল দৈর্ঘ্যের ধরণের ক্ষেত্রটিকে একটি URI-তে ম্যাপ করে। ট্যাগ ডিসপ্যাচ সিস্টেমটি সেই URI-কে ACTION_NDEF_DISCOVERED ইনটেন্টের ডেটা ক্ষেত্রের সাথে ট্যাগ সম্পর্কিত অন্যান্য তথ্য, যেমন পেলোড, অন্তর্ভুক্ত করে। অন্যদিকে, যদি এটি TNF_UNKNOWN ধরণের কোনও রেকর্ডের মুখোমুখি হয়, তবে এটি এমন একটি ইনটেন্ট তৈরি করে যা ট্যাগের প্রযুক্তিগুলিকে অন্তর্ভুক্ত করে।

সারণি ১. সমর্থিত TNF এবং তাদের ম্যাপিং

টাইপ নেম ফর্ম্যাট (TNF) ম্যাপিং
TNF_ABSOLUTE_URI টাইপ ফিল্ডের উপর ভিত্তি করে URI।
TNF_EMPTY ACTION_TECH_DISCOVERED এ ফিরে আসে।
TNF_EXTERNAL_TYPE টাইপ ফিল্ডে URN-এর উপর ভিত্তি করে URI। URNটি NDEF টাইপ ফিল্ডে একটি সংক্ষিপ্ত আকারে এনকোড করা থাকে: <domain_name>:<service_name> । অ্যান্ড্রয়েড এটিকে vnd.android.nfc://ext/ <domain_name>:<service_name> আকারে একটি URI-তে ম্যাপ করে।
TNF_MIME_MEDIA টাইপ ফিল্ডের উপর ভিত্তি করে MIME টাইপ।
TNF_UNCHANGED প্রথম রেকর্ডে অবৈধ, তাই ACTION_TECH_DISCOVERED তে ফিরে আসে।
TNF_UNKNOWN ACTION_TECH_DISCOVERED এ ফিরে আসে।
TNF_WELL_KNOWN MIME টাইপ বা URI, রেকর্ড টাইপ ডেফিনিশন (RTD) এর উপর নির্ভর করে, যা আপনি টাইপ ফিল্ডে সেট করেছেন। উপলব্ধ RTD এবং তাদের ম্যাপিং সম্পর্কে আরও তথ্যের জন্য টেবিল 2 দেখুন।

সারণী ২। TNF_WELL_KNOWN এবং তাদের ম্যাপিংয়ের জন্য সমর্থিত RTD

রেকর্ড টাইপ ডেফিনিশন (RTD) ম্যাপিং
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 পেলোড পার্সিংয়ের উপর ভিত্তি করে URI।
RTD_TEXT MIME টাইপের text/plain
RTD_URI পেলোডের উপর ভিত্তি করে URI।

অ্যাপ্লিকেশনগুলিতে NFC ট্যাগ কীভাবে পাঠানো হয়

যখন ট্যাগ ডিসপ্যাচ সিস্টেমটি একটি ইন্টেন্ট তৈরি করে যা NFC ট্যাগ এবং এর সনাক্তকারী তথ্যকে ধারণ করে, তখন এটি একটি আগ্রহী অ্যাপ্লিকেশনে ইন্টেন্ট পাঠায় যা ইন্টেন্টের জন্য ফিল্টার করে। যদি একাধিক অ্যাপ্লিকেশন ইন্টেন্ট পরিচালনা করতে পারে, তাহলে অ্যাক্টিভিটি চয়নকারী উপস্থাপন করা হয় যাতে ব্যবহারকারী অ্যাক্টিভিটি নির্বাচন করতে পারেন। ট্যাগ ডিসপ্যাচ সিস্টেমটি তিনটি ইন্টেন্ট সংজ্ঞায়িত করে, যা সর্বোচ্চ থেকে সর্বনিম্ন অগ্রাধিকারের ক্রম অনুসারে তালিকাভুক্ত করা হয়:

  1. ACTION_NDEF_DISCOVERED : NDEF পেলোড ধারণকারী একটি ট্যাগ স্ক্যান করা হলে এবং এটি একটি স্বীকৃত ধরণের হলে একটি অ্যাক্টিভিটি শুরু করার জন্য এই ইন্টেন্ট ব্যবহার করা হয়। এটি সর্বোচ্চ অগ্রাধিকার ইন্টেন্ট, এবং ট্যাগ ডিসপ্যাচ সিস্টেম যখনই সম্ভব অন্য কোনও ইন্টেন্টের আগে এই ইন্টেন্ট দিয়ে একটি অ্যাক্টিভিটি শুরু করার চেষ্টা করে।

    দ্রষ্টব্য: অ্যান্ড্রয়েড ১৬ থেকে শুরু করে, URL লিঙ্ক সংরক্ষণকারী NFC ট্যাগগুলি স্ক্যান করলে (যেমন URI স্কিম "htttps://" বা "http://") ACTION_NDEF_DISCOVERED ইনটেন্টের পরিবর্তে ACTION_VIEW ইনটেন্ট ট্রিগার হবে।

  2. ACTION_TECH_DISCOVERED : যদি ACTION_NDEF_DISCOVERED ইন্টেন্ট পরিচালনা করার জন্য কোনও কার্যকলাপ নিবন্ধিত না হয়, তাহলে ট্যাগ ডিসপ্যাচ সিস্টেম এই ইন্টেন্ট দিয়ে একটি অ্যাপ্লিকেশন শুরু করার চেষ্টা করে। যদি স্ক্যান করা ট্যাগে NDEF ডেটা থাকে যা MIME টাইপ বা URI তে ম্যাপ করা যায় না, অথবা যদি ট্যাগে NDEF ডেটা না থাকে কিন্তু একটি পরিচিত ট্যাগ প্রযুক্তির হয়, তাহলে এই ইন্টেন্টটি সরাসরি শুরু হয় (প্রথমে ACTION_NDEF_DISCOVERED শুরু না করে)।
  3. ACTION_TAG_DISCOVERED : যদি কোনও কার্যকলাপ ACTION_NDEF_DISCOVERED বা ACTION_TECH_DISCOVERED ইন্টেন্ট পরিচালনা না করে তবে এই ইন্টেন্টটি শুরু হয়।

ট্যাগ ডিসপ্যাচ সিস্টেমের কাজ করার মূল পদ্ধতি নিম্নরূপ:

  1. NFC ট্যাগ পার্স করার সময় ট্যাগ ডিসপ্যাচ সিস্টেম দ্বারা তৈরি করা উদ্দেশ্যের সাথে একটি কার্যকলাপ শুরু করার চেষ্টা করুন (হয় ACTION_NDEF_DISCOVERED অথবা ACTION_TECH_DISCOVERED )।
  2. যদি সেই ইন্টেন্টের জন্য কোনও অ্যাক্টিভিটি ফিল্টার না থাকে, তাহলে পরবর্তী সর্বনিম্ন অগ্রাধিকার ইন্টেন্ট ( ACTION_TECH_DISCOVERED অথবা ACTION_TAG_DISCOVERED ) দিয়ে একটি অ্যাক্টিভিটি শুরু করার চেষ্টা করুন যতক্ষণ না কোনও অ্যাপ্লিকেশন ইন্টেন্টের জন্য ফিল্টার করে অথবা ট্যাগ ডিসপ্যাচ সিস্টেম সমস্ত সম্ভাব্য ইন্টেন্ট চেষ্টা করে।
  3. যদি কোনও অ্যাপ্লিকেশন কোনও উদ্দেশ্যের জন্য ফিল্টার না করে, তাহলে কিছুই করবেন না।
চিত্র ১. ট্যাগ ডিসপ্যাচ সিস্টেম

যখনই সম্ভব, NDEF বার্তা এবং ACTION_NDEF_DISCOVERED ইন্টেন্ট নিয়ে কাজ করুন, কারণ এটি তিনটির মধ্যে সবচেয়ে নির্দিষ্ট। এই ইন্টেন্ট আপনাকে অন্য দুটি ইন্টেন্টের তুলনায় আরও উপযুক্ত সময়ে আপনার অ্যাপ্লিকেশন শুরু করতে দেয়, যা ব্যবহারকারীকে আরও ভাল অভিজ্ঞতা প্রদান করে।

Android ম্যানিফেস্টে NFC অ্যাক্সেসের অনুরোধ করুন

কোনও ডিভাইসের NFC হার্ডওয়্যার অ্যাক্সেস করার এবং NFC ইন্টেন্টগুলি সঠিকভাবে পরিচালনা করার আগে, আপনার AndroidManifest.xml ফাইলে এই আইটেমগুলি ঘোষণা করুন:

  • NFC হার্ডওয়্যার অ্যাক্সেস করার জন্য NFC <uses-permission> উপাদান:
    <uses-permission android:name="android.permission.NFC" />
  • আপনার অ্যাপ্লিকেশনটি যে ন্যূনতম SDK সংস্করণটি সমর্থন করতে পারে। API লেভেল 9 শুধুমাত্র ACTION_TAG_DISCOVERED এর মাধ্যমে সীমিত ট্যাগ প্রেরণ সমর্থন করে এবং শুধুমাত্র EXTRA_NDEF_MESSAGES অতিরিক্তের মাধ্যমে NDEF বার্তাগুলিতে অ্যাক্সেস দেয়। অন্য কোনও ট্যাগ বৈশিষ্ট্য বা I/O ক্রিয়াকলাপ অ্যাক্সেসযোগ্য নয়। API লেভেল 10-এ বিস্তৃত পাঠক/লেখক সমর্থনের পাশাপাশি ফোরগ্রাউন্ড NDEF পুশিং অন্তর্ভুক্ত রয়েছে এবং API লেভেল 14 NDEF রেকর্ড তৈরি করার জন্য অতিরিক্ত সুবিধাজনক পদ্ধতি সরবরাহ করে।
    <uses-sdk android:minSdkVersion="10"/>
  • uses-feature উপাদান যাতে আপনার অ্যাপ্লিকেশনটি শুধুমাত্র NFC হার্ডওয়্যার আছে এমন ডিভাইসের জন্য Google Play তে প্রদর্শিত হয়:
    <uses-feature android:name="android.hardware.nfc" android:required="true" />

    যদি আপনার অ্যাপ্লিকেশনটি NFC কার্যকারিতা ব্যবহার করে, কিন্তু সেই কার্যকারিতা আপনার অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ না হয়, তাহলে আপনি uses-feature উপাদানটি বাদ দিতে পারেন এবং রানটাইমে NFC উপলব্ধতা পরীক্ষা করতে পারেন getDefaultAdapter() null কিনা তা পরীক্ষা করে।

NFC ইন্টেন্টের জন্য ফিল্টার

আপনার পছন্দের NFC ট্যাগটি স্ক্যান করার সময় আপনার অ্যাপ্লিকেশনটি শুরু করার জন্য, আপনার অ্যাপ্লিকেশনটি Android ম্যানিফেস্টে থাকা এক, দুটি, অথবা তিনটি NFC ইন্টেন্টের জন্য ফিল্টার করতে পারে। তবে, আপনার অ্যাপ্লিকেশনটি কখন শুরু হবে তার সর্বাধিক নিয়ন্ত্রণের জন্য আপনি সাধারণত ACTION_NDEF_DISCOVERED ইন্টেন্টের জন্য ফিল্টার করতে চান। ACTION_TECH_DISCOVERED ইন্টেন্টটি ACTION_NDEF_DISCOVERED এর জন্য একটি ফলব্যাক, যখন ACTION_NDEF_DISCOVERED এর জন্য কোনও অ্যাপ্লিকেশন ফিল্টার করে না বা যখন পেলোড NDEF হয় না তখন। ACTION_TAG_DISCOVERED এর জন্য ফিল্টারিং সাধারণত খুব সাধারণ বিভাগের জন্য ফিল্টার করা হয়। অনেক অ্যাপ্লিকেশন ACTION_NDEF_DISCOVERED এর আগে ACTION_TAG_DISCOVERED বা ACTION_TECH_DISCOVERED জন্য ফিল্টার করবে, তাই আপনার অ্যাপ্লিকেশনটি শুরু হওয়ার সম্ভাবনা কম। ACTION_TAG_DISCOVERED কেবলমাত্র সেইসব ক্ষেত্রেই অ্যাপ্লিকেশনগুলিকে ফিল্টার করার শেষ উপায় হিসেবে উপলব্ধ যেখানে ACTION_NDEF_DISCOVERED বা ACTION_TECH_DISCOVERED উদ্দেশ্য পরিচালনা করার জন্য অন্য কোনও অ্যাপ্লিকেশন ইনস্টল করা নেই।

যেহেতু NFC ট্যাগ স্থাপনা বিভিন্ন রকম হয় এবং অনেক সময় আপনার নিয়ন্ত্রণে থাকে না, তাই এটি সবসময় সম্ভব হয় না, যে কারণে প্রয়োজনে আপনি অন্য দুটি ইন্টেন্টে ফিরে যেতে পারেন। যখন আপনার ট্যাগের ধরণ এবং ডেটা লেখার উপর নিয়ন্ত্রণ থাকে, তখন আপনার ট্যাগগুলি ফর্ম্যাট করার জন্য NDEF ব্যবহার করার পরামর্শ দেওয়া হয়। নিম্নলিখিত বিভাগগুলিতে প্রতিটি ধরণের ইন্টেন্টের জন্য কীভাবে ফিল্টার করবেন তা বর্ণনা করা হয়েছে।

ক্রিয়া_নয়_আবিষ্কৃত

ACTION_NDEF_DISCOVERED ইন্টেন্ট ফিল্টার করার জন্য, আপনি যে ধরণের ডেটা ফিল্টার করতে চান তার সাথে ইন্টেন্ট ফিল্টারটি ঘোষণা করুন। নিম্নলিখিত উদাহরণে MIME ধরণের text/plain সহ 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 আকারে একটি URI ফিল্টার করে।

<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_আবিষ্কৃত

যদি আপনার অ্যাক্টিভিটি ACTION_TECH_DISCOVERED ইনটেন্টের জন্য ফিল্টার করে, তাহলে আপনাকে অবশ্যই একটি XML রিসোর্স ফাইল তৈরি করতে হবে যা আপনার অ্যাক্টিভিটি যে প্রযুক্তিগুলিকে একটি 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 উদ্দেশ্য নিয়ে কাজ করার বিষয়ে আরও তথ্যের জন্য, উন্নত NFC নথিতে সমর্থিত ট্যাগ প্রযুক্তির সাথে কাজ করা দেখুন।

ACTION_TAG_আবিষ্কৃত

ACTION_TAG_DISCOVERED এর জন্য ফিল্টার করতে নিম্নলিখিত ইন্টেন্ট ফিল্টারটি ব্যবহার করুন:

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

অ্যাকশন_ভিউ

অ্যান্ড্রয়েড ১৬ শুরু করে, URL লিঙ্ক সংরক্ষণকারী NFC ট্যাগগুলি স্ক্যান করলে ACTION_VIEW ইনটেন্টটি ট্রিগার হবে। ACTION_VIEW ফিল্টার করতে this দেখুন। URL এর জন্য আপনার অ্যাপ খুলতে Android app links ব্যবহার করুন।

ইন্টেন্ট থেকে তথ্য সংগ্রহ করুন

যদি কোনও কার্যকলাপ NFC ইনটেন্টের কারণে শুরু হয়, তাহলে আপনি ইনটেন্ট থেকে স্ক্যান করা NFC ট্যাগ সম্পর্কে তথ্য পেতে পারেন। স্ক্যান করা ট্যাগের উপর নির্ভর করে ইনটেন্টগুলিতে নিম্নলিখিত অতিরিক্ত বৈশিষ্ট্য থাকতে পারে:

  • EXTRA_TAG (প্রয়োজনীয়): স্ক্যান করা ট্যাগের প্রতিনিধিত্বকারী একটি Tag অবজেক্ট।
  • EXTRA_NDEF_MESSAGES (ঐচ্ছিক): ট্যাগ থেকে পার্স করা NDEF বার্তাগুলির একটি অ্যারে। ACTION_NDEF_DISCOVERED ইন্টেন্টের ক্ষেত্রে এই অতিরিক্তটি বাধ্যতামূলক।
  • EXTRA_ID (ঐচ্ছিক): ট্যাগের নিম্ন-স্তরের আইডি।

এই অতিরিক্তগুলি পেতে, আপনার কার্যকলাপটি NFC ইন্টেন্টগুলির একটি দিয়ে চালু করা হয়েছে কিনা তা পরীক্ষা করে দেখুন যাতে নিশ্চিত করা যায় যে কোনও ট্যাগ স্ক্যান করা হয়েছে, এবং তারপরে ইনটেন্ট থেকে অতিরিক্তগুলি বের করুন। নিম্নলিখিত উদাহরণটি ACTION_NDEF_DISCOVERED ইন্টেন্ট পরীক্ষা করে এবং একটি ইনটেন্ট অতিরিক্ত থেকে NDEF বার্তা পায়।

কোটলিন

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

জাভা

@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 অবজেক্ট পেতে পারেন, যাতে পেলোড থাকবে এবং আপনাকে ট্যাগের প্রযুক্তিগুলি গণনা করার অনুমতি দেবে:

কোটলিন

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

জাভা

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

সাধারণ ধরণের NDEF রেকর্ড তৈরি করুন

এই বিভাগে NFC ট্যাগে লেখার সময় আপনাকে সাহায্য করার জন্য সাধারণ ধরণের NDEF রেকর্ড কীভাবে তৈরি করবেন তা বর্ণনা করা হয়েছে। Android 4.0 (API লেভেল 14) থেকে শুরু করে, createUri() পদ্ধতিটি আপনাকে স্বয়ংক্রিয়ভাবে URI রেকর্ড তৈরি করতে সাহায্য করার জন্য উপলব্ধ। Android 4.1 (API লেভেল 16) থেকে শুরু করে, createExternal() এবং createMime() MIME এবং বহিরাগত ধরণের NDEF রেকর্ড তৈরি করতে সাহায্য করার জন্য উপলব্ধ। NDEF রেকর্ড ম্যানুয়ালি তৈরি করার সময় ভুল এড়াতে যখনই সম্ভব এই সহায়ক পদ্ধতিগুলি ব্যবহার করুন।

এই বিভাগে রেকর্ডের জন্য সংশ্লিষ্ট ইন্টেন্ট ফিল্টার কীভাবে তৈরি করবেন তাও বর্ণনা করা হয়েছে। এই সমস্ত NDEF রেকর্ড উদাহরণগুলি আপনি যে NDEF বার্তাটি একটি ট্যাগে লিখছেন তার প্রথম NDEF রেকর্ডে থাকা উচিত।

টিএনএফ_এবিএসওএলইউটি_ইউআরআই

দ্রষ্টব্য: আমরা আপনাকে TNF_ABSOLUTE_URI এর পরিবর্তে RTD_URI টাইপ ব্যবহার করার পরামর্শ দিচ্ছি, কারণ এটি আরও কার্যকর।

আপনি নিম্নলিখিত উপায়ে একটি TNF_ABSOLUTE_URI NDEF রেকর্ড তৈরি করতে পারেন:

কোটলিন

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

জাভা

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 NDEF রেকর্ড তৈরি করতে পারেন:

createMime() পদ্ধতি ব্যবহার করে:

কোটলিন

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

জাভা

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

NdefRecord ম্যানুয়ালি তৈরি করা হচ্ছে:

কোটলিন

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

জাভা

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 রেকর্ড তৈরি করতে পারেন:

কোটলিন

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

জাভা

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) পদ্ধতি ব্যবহার করে:

কোটলিন

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

জাভা

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

createUri(Uri) পদ্ধতি ব্যবহার করে:

কোটলিন

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

জাভা

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

NdefRecord ম্যানুয়ালি তৈরি করা হচ্ছে:

কোটলিন

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)

জাভা

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 NDEF রেকর্ড তৈরি করতে পারেন:

createExternal() পদ্ধতি ব্যবহার করে:

কোটলিন

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)

জাভা

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 ম্যানুয়ালি তৈরি করা হচ্ছে:

কোটলিন

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

জাভা

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>

অ্যান্ড্রয়েড-চালিত এবং নন-অ্যান্ড্রয়েড-চালিত উভয় ডিভাইসকেই আরও ভালোভাবে সমর্থন করার জন্য আরও জেনেরিক NFC ট্যাগ স্থাপনের জন্য TNF_EXTERNAL_TYPE ব্যবহার করুন।

দ্রষ্টব্য : TNF_EXTERNAL_TYPE এর জন্য URN গুলির একটি ক্যানোনিকাল ফর্ম্যাট রয়েছে: urn:nfc:ext:example.com:externalType , তবে NFC ফোরাম RTD স্পেসিফিকেশন ঘোষণা করে যে URN এর urn:nfc:ext: অংশটি NDEF রেকর্ড থেকে বাদ দিতে হবে। তাই আপনাকে কেবল ডোমেন (উদাহরণে example.com ) এবং টাইপ (উদাহরণে externalType ) একটি কোলন দ্বারা পৃথক করে দিতে হবে। TNF_EXTERNAL_TYPE প্রেরণ করার সময়, Android urn:nfc:ext:example.com:externalType URN কে vnd.android.nfc://ext/example.com:externalType URI তে রূপান্তর করে, যা উদাহরণের ইন্টেন্ট ফিল্টার ঘোষণা করে।

অ্যান্ড্রয়েড অ্যাপ্লিকেশন রেকর্ড

অ্যান্ড্রয়েড ৪.০ (এপিআই লেভেল ১৪) তে প্রবর্তিত একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন রেকর্ড (AAR) একটি শক্তিশালী নিশ্চিততা প্রদান করে যে যখন একটি NFC ট্যাগ স্ক্যান করা হয় তখন আপনার অ্যাপ্লিকেশনটি শুরু হয়েছে। একটি AAR-তে একটি NDEF রেকর্ডের ভিতরে একটি অ্যাপ্লিকেশনের প্যাকেজ নাম এমবেড করা থাকে। আপনি আপনার NDEF বার্তার যেকোনো NDEF রেকর্ডে একটি AAR যোগ করতে পারেন, কারণ অ্যান্ড্রয়েড AAR-এর জন্য সম্পূর্ণ NDEF বার্তা অনুসন্ধান করে। যদি এটি একটি AAR খুঁজে পায়, তবে এটি AAR-এর ভিতরে থাকা প্যাকেজ নামের উপর ভিত্তি করে অ্যাপ্লিকেশনটি শুরু করে। যদি অ্যাপ্লিকেশনটি ডিভাইসে উপস্থিত না থাকে, তাহলে অ্যাপ্লিকেশনটি ডাউনলোড করার জন্য Google Play চালু করা হয়।

AAR গুলি কার্যকর যদি আপনি চান যে অন্যান্য অ্যাপ্লিকেশনগুলি একই ইন্টেন্টের জন্য ফিল্টারিং করতে না পারে এবং আপনার দ্বারা স্থাপন করা নির্দিষ্ট ট্যাগগুলি পরিচালনা করতে না পারে। AAR গুলি কেবল অ্যাপ্লিকেশন স্তরে সমর্থিত, কারণ প্যাকেজ নামের সীমাবদ্ধতা রয়েছে, এবং ইন্টেন্ট ফিল্টারিংয়ের মতো অ্যাক্টিভিটি স্তরে নয়। যদি আপনি অ্যাক্টিভিটি স্তরে কোনও ইন্টেন্ট পরিচালনা করতে চান, তাহলে ইনটেন্ট ফিল্টার ব্যবহার করুন

যদি একটি ট্যাগে AAR থাকে, তাহলে ট্যাগ ডিসপ্যাচ সিস্টেম নিম্নলিখিত পদ্ধতিতে ডিসপ্যাচ করে:

  1. স্বাভাবিকভাবে একটি ইন্টেন্ট ফিল্টার ব্যবহার করে একটি অ্যাক্টিভিটি শুরু করার চেষ্টা করুন। যদি ইন্টেন্টের সাথে মেলে এমন অ্যাক্টিভিটি AAR এর সাথেও মেলে, তাহলে অ্যাক্টিভিটি শুরু করুন।
  2. যদি ইন্টেন্টের জন্য ফিল্টার করা অ্যাক্টিভিটি AAR-এর সাথে মেলে না, যদি একাধিক অ্যাক্টিভিটি ইন্টেন্ট পরিচালনা করতে পারে, অথবা যদি কোনও অ্যাক্টিভিটি ইন্টেন্ট পরিচালনা না করে, তাহলে AAR দ্বারা নির্দিষ্ট করা অ্যাপ্লিকেশনটি শুরু করুন।
  3. যদি কোনও অ্যাপ্লিকেশন AAR দিয়ে শুরু না হয়, তাহলে AAR-ভিত্তিক অ্যাপ্লিকেশনটি ডাউনলোড করতে Google Play-তে যান।

দ্রষ্টব্য: আপনি ফোরগ্রাউন্ড ডিসপ্যাচ সিস্টেম ব্যবহার করে AAR এবং ইন্টেন্ট ডিসপ্যাচ সিস্টেমকে ওভাররাইড করতে পারেন, যা NFC ট্যাগ আবিষ্কৃত হলে ফোরগ্রাউন্ড অ্যাক্টিভিটিকে অগ্রাধিকার দেয়। এই পদ্ধতিতে, AAR এবং ইনটেন্ট ডিসপ্যাচ সিস্টেমকে ওভাররাইড করার জন্য অ্যাক্টিভিটি অবশ্যই ফোরগ্রাউন্ডে থাকতে হবে।

যদি আপনি এখনও স্ক্যান করা ট্যাগগুলির জন্য ফিল্টার করতে চান যেখানে AAR নেই, তাহলে আপনি ইনটেন্ট ফিল্টারগুলিকে স্বাভাবিক হিসাবে ঘোষণা করতে পারেন। যদি আপনার অ্যাপ্লিকেশনটি AAR নেই এমন অন্যান্য ট্যাগগুলিতে আগ্রহী হয় তবে এটি কার্যকর। উদাহরণস্বরূপ, আপনি হয়তো গ্যারান্টি দিতে চান যে আপনার অ্যাপ্লিকেশনটি আপনার স্থাপন করা মালিকানাধীন ট্যাগগুলির পাশাপাশি তৃতীয় পক্ষের দ্বারা স্থাপন করা সাধারণ ট্যাগগুলি পরিচালনা করে। মনে রাখবেন যে AAR গুলি Android 4.0 বা তার পরবর্তী ডিভাইসের জন্য নির্দিষ্ট, তাই ট্যাগগুলি স্থাপন করার সময়, আপনি সম্ভবত AAR এবং MIME প্রকার/URI এর সংমিশ্রণ ব্যবহার করতে চান যাতে ডিভাইসের বিস্তৃত পরিসর সমর্থন করা যায়। এছাড়াও, যখন আপনি NFC ট্যাগ স্থাপন করেন, তখন বেশিরভাগ ডিভাইসের (Android-চালিত এবং অন্যান্য ডিভাইস) জন্য সমর্থন সক্ষম করার জন্য আপনি কীভাবে আপনার NFC ট্যাগগুলি লিখতে চান তা ভেবে দেখুন। অ্যাপ্লিকেশনগুলির জন্য পার্থক্য করা সহজ করার জন্য আপনি তুলনামূলকভাবে অনন্য MIME প্রকার বা URI সংজ্ঞায়িত করে এটি করতে পারেন।

অ্যান্ড্রয়েড একটি AAR তৈরি করার জন্য একটি সহজ API প্রদান করে, createApplicationRecord() । আপনাকে যা করতে হবে তা হল আপনার NdefMessage এর যেকোনো জায়গায় AAR এম্বেড করুন। আপনি আপনার NdefMessage এর প্রথম রেকর্ড ব্যবহার করতে চান না, যদি না AAR NdefMessage এর একমাত্র রেকর্ড হয়। এর কারণ হল অ্যান্ড্রয়েড সিস্টেম ট্যাগের MIME টাইপ বা URI নির্ধারণের জন্য NdefMessage এর প্রথম রেকর্ড পরীক্ষা করে, যা অ্যাপ্লিকেশনগুলিকে ফিল্টার করার জন্য একটি উদ্দেশ্য তৈরি করতে ব্যবহৃত হয়। নিম্নলিখিত কোডটি আপনাকে দেখায় কিভাবে একটি AAR তৈরি করবেন:

কোটলিন

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

জাভা

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

NFC ট্যাগ স্ক্যানিংয়ের জন্য অ্যাপ অ্যালাউলিস্ট

অ্যান্ড্রয়েড ১৬ থেকে শুরু করে, যখন কোনও অ্যাপ প্রথমবারের মতো NFC ট্যাগ স্ক্যান করার ইচ্ছা পায় তখন ব্যবহারকারীদের জানানো হয়। ব্যবহারকারীকে বিজ্ঞপ্তিতে NFC ট্যাগ স্ক্যান করা থেকে অ্যাপটিকে আর নিষিদ্ধ করার বিকল্প দেওয়া হয়।

  • ব্যবহারকারী NfcAdapter.isTagIntentAllowed() ব্যবহার করে অ্যাপগুলিকে NFC ট্যাগ স্ক্যান করার অনুমতি দিয়েছে কিনা তা পরীক্ষা করতে পারে।
  • অ্যাপগুলি ব্যবহারকারীকে ACTION_CHANGE_TAG_INTENT_PREFERENCE ইনটেন্ট পাঠিয়ে আবার NFC ট্যাগ স্ক্যান করার অনুমতি দিতে অনুরোধ করতে পারে।

দ্রষ্টব্য: NFC ট্যাগ স্ক্যান অ্যাপের অনুমতি তালিকাটি Settings > Apps > Special app access > Launch via NFC অধীনে অ্যাক্সেসযোগ্য।

ব্যবহারকারীদের উত্থাপিত উদ্বেগ দূর করার জন্য এই প্রক্রিয়াটি যুক্ত করা হয়েছে যেখানে NFC ট্যাগের জন্য নিবন্ধিত ইন্টেন্ট ফিল্টার থাকা কিছু অ্যাপ বারবার ফোনটিকে NFC ট্যাগের (ক্রেডিট কার্ড, অন্য ফোন/ঘড়ি, ইত্যাদি) পাশে রাখলে সামনের দিকে চলে আসে।