一、NFC介绍
NFC(Near Field Communication)指的是近场通信技术,它是一种简短距离的、无线的通信技术,最初用于收款机和交通设施,现在被应用于各种场景,如移动支付、智能标签、门禁等。NFC技术是基于RFID技术,但有一个关键的不同之处是距离范围,RFID可以在更长的距离内进行通信,而NFC只能在极短的距离内进行通信,通常距离只有几厘米。
二、NFC应用场景
NFC技术可以用于各种场景,包括:
1. 移动支付
利用NFC技术,手机可以被用作移动支付设备,用户只需将手机放在读卡器上即可完成支付。此外,用户可以使用手机,在商场等地方轻松购物。
2. 智能标签
在任何物品上粘贴一个NFC标签,这个标签上可以包含任何信息,如联系方式、地理位置、甚至是网站链接。用户可以使用NFC手机扫描这些标签来获取这些信息。
3. 门禁
NFC技术可以用于门禁系统,使员工或其他人员通过一些门禁系统从而进入不同的区域。
三、NFC的开发实践
在Android上,开发人员可以使用NFC技术,以更简单,更快速的方式实现多种应用场景。
1. 发送和接收NFC数据
要使用Android中的NFC功能,您需要从NeftService创建一个PendingIntent,并使用它处理所有NDEF_DISCOVERED意图。然后,您需要创建一个IntentFilter,该IntentFilter将在您的应用中的Manifext中注册,以便您可以处理在您的应用内发现的所有NFC标记。
private NfcAdapter mNfcAdapter; private PendingIntent mPendingIntent; private IntentFilter[] mIntentFilters; private String[][] mTechLists; mNfcAdapter = NfcAdapter.getDefaultAdapter(this); mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); IntentFilter ndefIntent = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); try { ndefIntent.addDataType("text/plain"); } catch (IntentFilter.MalformedMimeTypeException e) { e.printStackTrace(); } mIntentFilters = new IntentFilter[] {ndefIntent,}; mTechLists = new String[][] { new String[] { NfcF.class.getName() } };
当用户扫描一个标签时,如果在您的应用内,它将触发您的PendingIntent,您可以在您的activity中捕获由标签触发的intent,以及包含标签数据的一个Parcelable对象:
public void onNewIntent(Intent intent) { if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMsgs != null) { NdefMessage[] msgs = new NdefMessage[rawMsgs.length]; for (int i = 0; i < rawMsgs.length; i++) { msgs[i] = (NdefMessage) rawMsgs[i]; } if (msgs.length > 0) { String text = new String(msgs[0].getRecords()[0].getPayload()); //将数据显示在UI界面上 } } } }
2. 创建NFC标签
要创建一个NFC标签,您可以使用createUri或createMimeRecord函数创建一个NDEF记录,然后将其添加到NDEFmessage中。消息将被写入一个可写的NFC标签:
NdefRecord record = NdefRecord.createUri("http://www.google.com"); NdefMessage message = new NdefMessage(new NdefRecord[] {record}); Ndef ndef = Ndef.get(tag); ndef.connect(); ndef.writeNdefMessage(message); ndef.close();
3. 读取NFC标签的id
要读取NFC标签的ID,您可以调用由标签对象提供的getId方法。标签ID是一个字节数组,可以根据需要进行转换和使用。
String tagId = ByteArrayToHexString(tag.getId());
结论
总的来说,NFC技术是一项非常方便的技术,可以在多种应用场景中使用。开发人员可以轻松使用Android的NFC API构建各种NFC应用程序。