什么是NFC?Google一大坨,百度一大坨,我就不讲了,这里我只讨论技术细节。
首先我们先讨论一下这样的一个问题,当我们把NFC标签靠近手机,并且手机感应后,我们通过什么方式能得到NFC标签信息呢?答案就是通过Intent的方式来获取。现在的需求是我想在启动一个Activity后通过读NFC的方式得到里面的信息。下面我来介绍具体做法。
通过分析需求得知,我们需要前台调度系统机制,这种机制允许Activity拦截Intent对象。
1.获取NfcAdapter
nfcAdapter= NfcAdapter.getDefaultAdapter(this);
2.构造PendingInent对象封装NFC标签信息
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
3.声明Intent对象的过滤器
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); try { ndef.addDataType("*/*"); } catch (IntentFilter.MalformedMimeTypeException e) { throw new RuntimeException("fail", e); }
4建立一个处理NFC标签技术的数组
mTechLists = new String[][]{new String[]{NfcF.class.getName()}};
5.这是最核心最重要的一步了,我们需要在Activity的onResume方法中调用nfcadapter的enableForegroundDispatch方法把上面的变量作为参数传递进来,
nfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters,mTechLists);
一旦NFC标签接触到手机,这个方法就会被激活。
6.最后我们需要在onNewIntent方法中处理Intent回调给我们的信息。
Parcelable[] rawArray = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage mNdefMsg = (NdefMessage) rawArray[0];//得到NdefMessage NdefRecord mNdefRecord = mNdefMsg.getRecords()[0];//得到NdefRecord