Android NFC研究工具包入门指南

news/2025/2/15 23:49:29/

目录

一、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有了更深入的了解,也希望这些知识能帮助你在实际项目中实现更多有趣的功能。


http://www.ppmy.cn/news/78338.html

相关文章

物联网手势控制小车所遇问题与解决方案

LCD1602无法显示问题 问题描述&#xff1a;按照开源社区教程完成LCD1602驱动显示程序的编写&#xff0c;成功点亮屏幕&#xff0c;开启背光&#xff0c;但无法观察到显示数据。 分析过程与解决方案&#xff1a; 1.是否IIC地址不对 使用以下代码扫描IIC总线上的设备&#xf…

【lager】日志系统2:测试程序调试

design 官方设计文档 design cmakelist增加plog构建 cmake_minimum_required(VERSION 3.1.3 FATAL_ERROR) project(Lager)set(CMAKE_CXX_STANDARD 11) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)find_package(

shell编程快捷命令

shell编程快捷命令 一、快捷排序 — sort 命令二、快捷去重 — uniq 命令三、快捷替换 — tr 命令四、快速裁剪 — cut 命令五、文件拆分 — split 命令七、变量扫描器 — eval 命令 一、快捷排序 — sort 命令 sort命令用于以行为单位&#xff0c;对文件的内容进行排序 语法格…

HCIA——VLAN

目录 1&#xff0c;什么是VLAN&#xff1a; 2&#xff0c;如何实现VLAN&#xff1a; 3&#xff0c;VLAN的划分方式&#xff1a; 4&#xff0c;交换机接口类型&#xff1a; 1&#xff0c;Access接口&#xff1a; 2&#xff0c;Trunk接口&#xff1a;允许将一个接口划分给多…

找不到vcruntime140.dll,无法继续执行代码?多种解决方法解析

找不到vcruntime140.dll,无法继续执行代码&#xff1f;当你在尝试运行某个程序时&#xff0c;突然弹出一条错误提示框&#xff0c;告诉你无法继续执行代码&#xff0c;因为找不到vcruntime140.dll。这个问题很常见&#xff0c;但是它可能会让你感到困惑和疑惑。这篇文章将详细介…

如何入门Python——学习Python的指南针

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

在 iOS 16 中用 SwiftUI Charts 创建一个折线图

前言 苹果在 WWDC 2022 上推出了 SwiftUI 图表&#xff0c;这使得在 SwiftUI 视图中创建图表变得异常简单。图表是以丰富的格式呈现可视化数据的一种很好的方式&#xff0c;而且易于理解。本文展示了如何用比以前从头开始创建同样的折线图少得多的代码轻松创建折线图。此外&am…

用于具有缺失模态的脑肿瘤分割的模态自适应特征交互

文章目录 Modality-Adaptive Feature Interaction for Brain Tumor Segmentation with Missing Modalities摘要本文方法Modality-Adaptive Feature InteractionGraph RepresentationGraph Edge ComputationModality Feature Updating 实验结果 Modality-Adaptive Feature Inter…