Android NFC通信示例

news/2025/1/15 1:57:36/

前言

近距离无线通信 (NFC) 是一组近距离无线技术,通常只有在距离不超过 4 厘米时才能启动连接。借助 NFC,您可以在 NFC 标签与 Android 设备之间或者两台 Android 设备之间共享小型负载。

支持 NFC 的 Android 设备同时支持以下三种主要操作模式:

  1. 读取器/写入器模式:支持 NFC 设备读取和/或写入被动 NFC 标签和贴纸。
  2. 点对点模式:支持 NFC 设备与其他 NFC 对等设备交换数据;Android Beam 使用的就是此操作模式。
  3. 卡模拟模式:支持 NFC 设备本身充当 NFC 卡。然后,可以通过外部 NFC 读取器(例如 NFC 销售终端)访问模拟 NFC 卡。

示例

下面是一个简单的 Android NFC 通信示例,它演示了如何使用 NFC 技术在两个 Android 设备之间进行通信。

在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.NFC" />

在您的 Activity 中,您需要创建一个 NfcAdapter 对象,并注册一个 NDEF 消息接收器来处理接收到的 NDEF 消息。以下是一个示例:

public class MainActivity extends AppCompatActivity {private NfcAdapter nfcAdapter;private PendingIntent pendingIntent;private IntentFilter[] intentFiltersArray;private String[][] techListsArray;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 获取 NfcAdapter 对象nfcAdapter = NfcAdapter.getDefaultAdapter(this);// 创建一个 PendingIntent 对象,用于处理 NFC IntentIntent intent = new Intent(this, getClass());intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);// 创建一个 IntentFilter 对象,用于过滤 NFC IntentIntentFilter intentFilter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);try {intentFilter.addDataType("application/vnd.com.example.android.beam");} catch (IntentFilter.MalformedMimeTypeException e) {e.printStackTrace();}intentFiltersArray = new IntentFilter[] { intentFilter };// 创建一个 TechList 数组,用于指定 NFC 技术列表techListsArray = new String[][] { new String[] { NfcF.class.getName() } };}@Overrideprotected void onResume() {super.onResume();// 在 onResume() 方法中启用 NFC 功能,注册 NDEF 消息接收器if (nfcAdapter != null) {nfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);}}@Overrideprotected void onPause() {// 在 onPause() 方法中禁用 NFC 功能,注销 NDEF 消息接收器super.onPause();if (nfcAdapter != null) {nfcAdapter.disableForegroundDispatch(this);}}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);// 处理接收到的 NDEF 消息String action = intent.getAction();if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {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];}// 处理接收到的 NDEF 消息// ...}}}
}

在上述代码中,我们创建了一个 NfcAdapter 对象,使用 enableForegroundDispatch() 方法启用 NFC 功能,并在 onResume() 方法中注册了一个 NDEF 消息接收器。在 onPause() 方法中禁用 NFC 功能,并在 onNewIntent() 方法中处理接收到的 NDEF 消息。

此示例使用 NfcF 技术来进行 NFC 通信。如果您需要使用其他 NFC 技术进行通信,您需要修改 techListsArray 数组中的技术列表。同时,您还需要修改 IntentFilter 中的数据类型,以适应您的应用程序需求。

请注意,此示例仅演示了如何使用 NFC 技术在两个 Android 设备之间进行通信。在实际应用中,您可能需要更复杂的通信协议和数据格式。


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

相关文章

【C#学习笔记】引用类型(1)

文章目录 引用类型class匿名类 记录引用相等和值相等record声明 接口delegate 委托合并委托/多路广播委托 引用类型 引用类型的变量存储对其数据&#xff08;对象&#xff09;的引用&#xff0c;而值类型的变量直接包含其数据。 对于引用类型&#xff0c;两种变量可引用同一对…

【漏洞复现】Metabase 远程命令执行漏洞(CVE-2023-38646)

文章目录 前言声明一、漏洞介绍二、影响版本三、漏洞原理四、漏洞复现五、修复建议 前言 Metabase 0.46.6.1之前版本和Metabase Enterprise 1.46.6.1之前版本存在安全漏洞&#xff0c;未经身份认证的远程攻击者利用该漏洞可以在服务器上以运行 Metabase 服务器的权限执行任意命…

【MySQL】触发器 (十二)

🚗MySQL学习第十二站~ 🚩本文已收录至专栏:MySQL通关路 ❤️文末附全文思维导图,感谢各位点赞收藏支持~ 一.引入 触发器是与表有关的数据库对象,作用在insert/update/delete语句执行之前(BEFORE)或之后(AFTER),自动触发并执行触发器中定义的SQL语句集合。它可以协助应…

与时间赛跑:图算法如何加持自然灾害应急响应场景?

近日&#xff0c;受台风“杜苏芮”影响&#xff0c;华北、黄淮等地出现极端降雨过程&#xff0c;引发洪涝和地质灾害&#xff0c;造成京津冀地区的重大人员伤亡和财产损失。大家的心都被这场暴雨牢牢牵动着。 而在7月31日晚&#xff0c;小编的微信朋友圈开始被《京津冀暴雨紧急…

Android Studio新版本logcat过滤说明

按包名过滤 //输入package:&#xff08;输入一个p就会有提示的&#xff09; &#xff0c;后面加上包名 比如: package:com.xal.runcontrol package:包名可以完整或者输部分包名即可 package:包名需要输完整准确 package~:正则表达式过滤 不了解正则表达式的可以参考&#…

Effective Java笔记(24)静态成员类优于非静态成员类

嵌套类&#xff08; nested class &#xff09;是指定义在另一个类的内部的类 。 嵌套类存在的目的应该只是为它的外围类&#xff08;enclosing class &#xff09;提供服务 。 如果嵌套类将来可能会用于其他的某个环境中&#xff0c;它就应该是顶层类&#xff08; top-level c…

大数据开发的学习路线是什么样的

大数据技术的体系庞大且复杂&#xff0c;每年都会涌现出大量新的技术&#xff0c;目前大数据行业所涉及到的核心技术主要就是&#xff1a;数据采集、数据存储、数据清洗、数据查询分析和数据可视化。 学习大数据需要掌握什么语言基础&#xff1f; 1、Java基础 大数据框架90%以…

想参加华为杯竞赛、高教社杯和数学建模国赛的小伙伴看过来

本文目录 ⭐ 赛事介绍⭐ 辅导比赛 ⭐ 赛事介绍 ⭐ 参赛好处 ⭐ 辅导比赛 ⭐ 写在最后 ⭐ 赛事介绍 华为杯全国研究生数学建模竞赛是由华为公司主办的一项面向全国研究生的数学建模竞赛。该竞赛旨在通过实际问题的建模和解决&#xff0c;培养研究生的创新能力和团队合作精神&a…