How to read and write Android NFC tags?

I followed some tutorial using the adam rocker source code for my NFCTest. I want to be able to read and write NFC tags and also launch an application.

29.5k 21 21 gold badges 117 117 silver badges 126 126 bronze badges asked Apr 5, 2011 at 3:43 181 1 1 gold badge 1 1 silver badge 4 4 bronze badges

4 Answers 4

The NDEF Tools for Android utility project helps doing the following

The project also includes data bindings for all standardized NDEF record types, which really simplifies things compared to working with the (byte-array-based) NDEF classes included in the Android SDK.

Also see the NFC Eclipse plugin for a graphical NDEF editor - comes with an utility app which reads and writes to tags and beams, also has NFC reader integration.

By the way, you are looking for the Android Application Record for launching the app. The launching 'feature' does not require any real implementation; it is built into Android >= 4.0, so putting that record on a tag is enough.

answered Aug 26, 2012 at 2:52 8,287 6 6 gold badges 35 35 silver badges 50 50 bronze badges

i am reading up on NFC reading and writing and i was about to remove eclipse and go over ADT , would the nfc-eclipse-plugin be compatible/usable? the youtube tutorial looks clean

Commented Apr 15, 2015 at 9:54 sorry i meant Android Studio Commented Apr 15, 2015 at 10:06 The links don't work anymore Commented Nov 7, 2022 at 21:59

First of all you have to get permission in AndroidManifest.xml file for NFC. The permissions are:

The Activity which will perform NFC Read/write operation, add this intent filter in that activity in AndroidManifest.xml file:

In your activity onCreate() method you have to initialize the NFC adapter and define Pending Intent :

NfcAdapter mAdapter; PendingIntent mPendingIntent; mAdapter = NfcAdapter.getDefaultAdapter(this); if (mAdapter == null) < //nfc not support your device. return; >mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); 

In onResume() Call back enable the Foreground Dispatch to detect NFC intent.

mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null); 

In onPause() callback you must have to disable the forground dispatch:

 if (mAdapter != null)

In onNewIntent() call back method you will get the new Nfc Intent. After getting The Intent , you have to parse the intent to detect the card:

@Override protected void onNewIntent(Intent intent) < getTagInfo(intent) >private void getTagInfo(Intent intent)

Now You have the Tag. Then you can check the Tag Tech list to detect that Tag. The tag detection technique is here in My Another Answer Full complete project is here in My github profile

1 1 1 silver badge answered Feb 17, 2015 at 16:21 Md. Sajedul Karim Md. Sajedul Karim 7,005 4 4 gold badges 63 63 silver badges 89 89 bronze badges

Put these in your manifest :

Then to read NFC put this part in your activity:

at the end add go forward like my Activity :

import android.app.Activity; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.AnimationDrawable; import android.nfc.NdefMessage; import android.nfc.NdefRecord; import android.nfc.NfcAdapter; import android.nfc.Tag; import android.nfc.tech.Ndef; import android.os.Bundle; import android.os.Parcelable; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.balysv.materialripple.MaterialRippleLayout; import com.blogspot.android_er.androidnfctagdiscovered.R; import com.pixelcan.inkpageindicator.InkPageIndicator; import hpbyp.ir.app.hojre.fragment.slider.SliderPagerAdapter; import hpbyp.ir.app.hojre.utiles.G; import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; /** * An which handles a broadcast of a new tag that the device just discovered. */ public class ActivityLoadDataFromNFC extends AppCompatActivity < @Override protected void attachBaseContext(Context newBase) < super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); >@Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_load_data_from_nfc); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); mAdapter = NfcAdapter.getDefaultAdapter(this); if (mAdapter == null) < //nfc not support your device. return; >mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); > NfcAdapter mAdapter; PendingIntent mPendingIntent; @Override protected void onResume() < super.onResume(); mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null); >@Override protected void onPause() < super.onPause(); if (mAdapter != null) < mAdapter.disableForegroundDispatch(this); >> @Override protected void onNewIntent(Intent intent) < Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); GetDataFromTag(tag, intent); >private void GetDataFromTag(Tag tag, Intent intent) < Ndef ndef = Ndef.get(tag); try < ndef.connect(); // txtType.setText(ndef.getType().toString()); // txtSize.setText(String.valueOf(ndef.getMaxSize())); // txtWrite.setText(ndef.isWritable() ? "True" : "False"); Parcelable[] messages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (messages != null) < NdefMessage[] ndefMessages = new NdefMessage[messages.length]; for (int i = 0; i < messages.length; i++) < ndefMessages[i] = (NdefMessage) messages[i]; >NdefRecord record = ndefMessages[0].getRecords()[0]; byte[] payload = record.getPayload(); String text = new String(payload); Log.e("tag", "vahid" + text); ndef.close(); > > catch (Exception e) < Toast.makeText(getApplicationContext(), "Cannot Read From Tag.", Toast.LENGTH_LONG).show(); >> >