目录
一、NFC简介
二、Android NFC研究工具包
三、NFC的开发环境配置
四、NFC的使用方法
五、Android Beam
六、总结
一、NFC简介
NFC(Near Field Communication)近场通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输(在10厘米范围内)进行通信。在现实生活中,我们常常利用NFC进行公交卡支付、门禁卡识别等应用。
源码下载
二、Android NFC研究工具包
Android为NFC的开发提供了全面的支持,包含了API和相关的硬件支持,使开发者可以轻松地在应用中加入NFC功能。主要的功能包括:
- 读取和写入NFC标签
- 通过Android Beam功能,使两个装有NFC的设备间进行数据传输
- 卡模拟,使手机能模拟成NFC卡
三、NFC的开发环境配置
要使用Android的NFC功能,需要满足以下条件:
- Android设备需要支持NFC,并且系统版本至少是Android 2.3.3。
- Android的SDK中必须包含Google的NFC库。
检查设备是否支持NFC的代码如下:
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {Toast.makeText(this, "该设备不支持NFC功能", Toast.LENGTH_SHORT).show();
} else if (!nfcAdapter.isEnabled()) {Toast.makeText(this, "请在系统设置中先启用NFC功能", Toast.LENGTH_SHORT).show();
}
四、NFC的使用方法
下面是一段简单的示例代码,展示如何读取一个NFC标签中的文本数据:
@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.processNDEFMsg(messages[0]);}}
}private void processNDEFMsg(NdefMessage msg) {for (NdefRecord record : msg.getRecords()) {if (record.getTnf() == NdefRecord.TNF_WELL_KNOWN && Arrays.equals(record.getType(), NdefRecord.RTD_TEXT)) {byte[] payload = record.getPayload();String textEncoding = ((payload[0] & 128) == 0) ? "UTF-8" : "UTF-16";int languageCodeLength = payload[0] & 0063;try {String textData = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);// Display the text.Toast.makeText(this, textData, Toast.LENGTH_SHORT).show();}catch (UnsupportedEncodingException e) {Log.e("NFC", "Unsupported Encoding", e);}}}
}
在Android中,所有的NFC交互都是通过Intent机制进行的。当一个NFC标签靠近设备时,系统会自动创建一个Intent并将其发送到相应的Activity。开发者需要在Activity中重写onNewIntent()
方法来处理这个Intent。
上面的代码中,我们首先检查Intent的Action是否为ACTION_NDEF_DISCOVERED
,如果是,就获取并解析NDEF消息。NDEF(NFC Data Exchange Format)是一种常见的NFC数据格式,通常用于存储文本、URL等简单类型的数据。
processNDEFMsg()
方法中,我们遍历NDEF消息中的所有记录,查找TNF(Type Name Format)为TNF_WELL_KNOWN
和类型为RTD_TEXT
的记录,这种记录通常表示包含了文本数据。我们提取出文本数据,并显示出来。
五、Android Beam
Android Beam是Android 4.0引入的一项新功能,允许用户通过NFC将数据从一台设备传送到另一台设备。使用Android Beam的代码如下:
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
nfcAdapter.setNdefPushMessageCallback(new NfcAdapter.CreateNdefMessageCallback() {@Overridepublic NdefMessage createNdefMessage(NfcEvent event) {String text = ("Beam me up, Android!\n\n" + "Beam Time: " + new SimpleDateFormat("HH:mm:ss").format(new Date()));NdefMessage msg = new NdefMessage(new NdefRecord[] { NdefRecord.createMime("application/vnd.com.example.android.beam", text.getBytes())});return msg;}
}, this);
在这个代码中,我们首先获取NfcAdapter的实例,然后调用setNdefPushMessageCallback()
方法来设置一个回调函数。当两台设备靠近并且准备好发送数据时,这个回调函数就会被调用。我们在回调函数中创建了一个包含文本数据的NDEF消息,并返回。当数据成功发送到另一台设备时,这个消息就会被发送出去。
六、总结
Android的NFC功能非常强大,只需要简单的配置和少量的代码就可以实现各种复杂的功能。如果你对NFC技术感兴趣,或者在你的应用中需要使用NFC功能,我强烈建议你去查看Android官方文档和示例代码,学习更多关于NFC的知识。
当然,NFC的应用也不仅仅限于以上提到的内容,更多的可能需要你去探索和实现。希望通过这篇文章,你对Android NFC有了更深入的了解,也希望这些知识能帮助你在实际项目中实现更多有趣的功能。