آموزش کار با nfc در برنامه نویسی اندروید
سلام دوستان در این پست به آموزش کار با nfc در برنامه نویسی اندروید می پردازیم nfc در نمونه خود یکی از بهترین راه ارتباطی است در ادامه به ویژگی آن می پردازیم و نحوه استفاده از آن یعنی خوادن دیتا و انتقال دیتا رو مورد بررسی قرار می دهیم.
شاید بهتر باشد اول بدانیم nfc چیست ؟
NFC (ارتباط حوزه نزدیک) مخفف کلمه Near Field Communication است و همان طور که از اسم آن بر می آید مجموعه ای از استانداردهای مخابرات بی سیم در فاصله های بسته و کوتاه است.
مزیت های استفاده از nfc عبارتند از
- کیف پول همراه (البته در ایران فقط توسط بانک شهر فعلا مورد دسترسی است )
- پرداخت پارکومتر
- دریافت بلیط یا کارت پرواز
- باز و بسته کردن درها
- دانلود اطلاعات
- امنیت بسیار بالا
معایب
- گران بودن
- امنیت پایین در leak شدن اطالاعات و پول اینترنتی
خب بدون مقدمه چینی اضافی بریم به بخش کد برنامه
ابتدا ما باید minsdk را برابر با مقدار 10 قرار دهیم به خاطر اینکه گوشی های اندروید 4.2.1 به بعد فقط از nfc پشیبانی می کند.
1 | <uses-sdk android:minSdkVersion="10"/> |
و مثل همیشه باید دسترسی استفاده از nfc را در androidmanifest قرار دهیم در غیر این صورت برنامه ما خطا می دهد.
1 | <uses-feature android:name="android.hardware.nfc" android:required="true"/> |
پکیج android.nfc کلاس هایی رو برای استفاده فراهم می کند که در ادامه به آنها می پردازیم.
کلاس NdefMessage
این کلاس یک پیغام از ndef را ایجاد می کند.
کلاس NdefRecord
این کلاس یک رکورد از نوع ndef ایجاد می کند.
کلاس NfcAdapter
یک اداپتر از نوع nfc ایجاد می کند.
و مهمترین کلاس آن Tag
که یک تگ در گوشی های مختلف وجود دارد از این برای خواندن وخیلی کار های دیگر استفاده می شود.
خب شاید بهتر باشه چک کنیم ایا nfc در گوشی شخص وجود دارد یا نه برای این کار از nfcAdapter استفاده می کنیم
1 2 3 4 5 6 7 8 9 | private NfcAdapter mNfcAdapter; mNfcAdapter = NfcAdapter.getDefaultAdapter(this); if(mNfcAdapter != null) { //Handle some NFC initialization here } else { Toast.makeText(this, "NFC not available on this device", Toast.LENGTH_SHORT).show(); } |
حال برای اینکه برنامه ای درست کنیم که در صورت بسته بودن هم tag را بخوند برای همین کد زیر را در اکتویتی خود قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 | Intent nfcIntent = new Intent(this, getClass()); nfcIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); nfcPendingIntent = PendingIntent.getActivity(this, 0, nfcIntent, 0); IntentFilter tagIntentFilter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); try { tagIntentFilter.addDataType("text/plain"); intentFiltersArray = new IntentFilter[]{tagIntentFilter}; } catch (Throwable t) { t.printStackTrace(); } |
حال یادمان باشد که باید در android manifest یک intent-filter را قرار دهیم این باعث خواندن تگ در هر جایی می شود
1 2 3 4 5 | <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain"/> </intent-filter> |
و برای خوندن یک رکور از tag ها (مثلا می خواهیم record کارت مترو را بخوانیم) می توانیم از کد زیر استفاده کنیم
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Ndef ndef = Ndef.get(tag); if (ndef == null) { // NDEF is not supported by this Tag. return null; } NdefMessage ndefMessage = ndef.getCachedNdefMessage(); if (ndefMessage == null) { mTextView.setText("The tag is empty !"); return null; } NdefRecord[] records = ndefMessage.getRecords(); for (NdefRecord ndefRecord : records) { if (ndefRecord.getTnf() == NdefRecord.TNF_WELL_KNOWN && Arrays.equals(ndefRecord.getType(), NdefRecord.RTD_TEXT)) { try { return readText(ndefRecord); } catch (UnsupportedEncodingException e) { Log.e(TAG, "Unsupported Encoding", e); } } } |
این اموزش هم به پایان رسید
موفق باشید.
سلام
خدا قوت
میشه کد کامل رو بذارید چون بعضی جاها اصلا مشخص نیست یه متغیر نوعش چیه ؟؟؟
یا کد رو باید کجا قرار داد
ممنونم
سلام و خسته نباشید لطفا کد کامل را بذارین ممنون میشم