Android NFC通信示例
前言
近距离无线通信 (NFC) 是一组近距离无线技术,通常只有在距离不超过 4 厘米时才能启动连接。借助 NFC,您可以在 NFC 标签与 Android 设备之间或者两台 Android 设备之间共享小型负载。
支持 NFC 的 Android 设备同时支持以下三种主要操作模式:
- 读取器/写入器模式:支持 NFC 设备读取和/或写入被动 NFC 标签和贴纸。
- 点对点模式:支持 NFC 设备与其他 NFC 对等设备交换数据;Android Beam 使用的就是此操作模式。
- 卡模拟模式:支持 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 设备之间进行通信。在实际应用中,您可能需要更复杂的通信协议和数据格式。
相关文章:
Android NFC通信示例
前言 近距离无线通信 (NFC) 是一组近距离无线技术,通常只有在距离不超过 4 厘米时才能启动连接。借助 NFC,您可以在 NFC 标签与 Android 设备之间或者两台 Android 设备之间共享小型负载。 支持 NFC 的 Android 设备同时支持以下三种主要操作模式&…...
2023年08月IDE流行度最新排名
点击查看最新IDE流行度最新排名(每月更新) 2023年08月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…...
使用Beego和MySQL实现帖子和评论的应用,并进行接口测试(附源码和代码深度剖析)
文章目录 小项目介绍源码分析main.gorouter.gomodels/user.gomodels/Post.gomodels/comment.gocontrollers/post.gocontrollers/comment.go 接口测试测试增加帖子测试查看帖子测试增加评论测试查看评论 小项目介绍 经过对需求的分析,我增加了一些额外的东西&#x…...
物联网潜在的巨大价值在于大数据分析
物联网潜在的巨大价值在于大数据分析 从数据里去挖掘市场或者用户的精准需求。 往小的说,后台可以统计用户家里各各插座一年甚至更久的用电情况,这些数据也可以通过app或者小程序展现给用户。 用户可以很直观看到自己一年的用电情况,哪个家…...
SSL原理详解
SSL协议结构: SSL协议分为两层,下层为SSL记录协议,上层为SSL握手协议、SSL密码变化协议和SSL警告协议。 1.下层为SSL记录协议,主要作用是为高层协议提供基本的安全服务 建立在可靠的传输之上,负责对上层的数据进行分块…...
linux下的etc目录代表什么意思
在Linux系统中,/etc目录是一个非常重要的目录,它包含了系统的配置文件和相关的配置信息。下面是一些/etc目录中常见的文件和目录: 1. /etc/passwd:此文件包含了所有用户账户的信息,包括用户名、用户ID、用户所属的组I…...
iOS 两种方式设置状态栏
1、ios9.0以前设置状态栏字体颜色 ///白色 [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]; ///黑色 [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleDefault]; 会看到如下提示: setStatusBarSty…...
html5:webSocket 基础使用
一、理解 HTML5 WebSocket HTML5 WebSocket是一种新型的网络协议,它能够在客户端和服务器之间建立实时的双向通信通道,使得浏览器和服务器之间的数据传输更加高效、快速和可靠。相比传统的HTTP协议,WebSocket协议使用更少的网络开销…...
html学习10-----总结(完)
<!DOCTYPE html> <html><head><meta charset"utf-8"/><title>html总结</title></head><body><h1>HTML总结</h1><br/><h2>文本格式化</h2><hr/><p><b>粗体文本<…...
Spring使用P命名空间实现注入数值信息-----Spring框架
<?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:p"http://www.springframework.org/schema/p"x…...
windows环境下安装RabbitMQ
一、RabbitMq简介1.1消息队列中间件简介消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性[架构] 使用较多的消息队列有 ActiveMQ(安全)&#x…...
Java源码规则引擎:jvs-rules决策流的自定义权限控制
规则引擎用于管理和执行业务规则。它提供了一个中央化的机制来定义、管理和执行业务规则,以便根据特定条件自动化决策和行为。规则引擎的核心概念是规则。规则由条件和动作组成。条件定义了规则适用的特定情况或规则触发的条件,而动作定义了规则满足时要…...
Python-字符串的世界
Python字符串的世界 在Python编程中,字符串(String)是一种非常重要的数据类型,用于表示文本信息。字符串可以包含字母、数字、特殊字符以及空格,它们在编程中被广泛用于文本处理、格式化输出、字符串匹配等各种场景。…...
使用上 Spring 的事件机制
本文主要是简单的讲述了Spring的事件机制,基本概念,讲述了事件机制的三要素事件、事件发布、事件监听器。如何实现一个事件机制,应用的场景,搭配Async注解实现异步的操作等等。希望对大家有所帮助。 Spring的事件机制的基本概念 …...
Linux安装QT
//进入qt安装包路径 cd qt安装包路径 //修改权限 sudo chmod x qt-opensource-linux-x64-5.14.2.run //运行qt安装包 sudo ./qt-opensource-linux-x64-5.14.2.run //安装编译器 sudo apt-get install gcc g //安装编译工具 sudo apt-get install build-essential //安装Op…...
如何用arduino uno主板播放自己想要的曲子。《我爱你中国》单片机版本。
目录 一.效果展示 二.基本原理 三.电路图 四.代码 一.效果展示 arduino播放《我爱你中国》 二.基本原理 利用arduino uno单片机实现对蜂鸣器振动频率的调节,基于PWM控制系统通过代码实现控制。 三.电路图 四.代码 //main.uno #define Buzzer 2int PotBuffer …...
redis入门2-命令
Redis的基本数据类型 redis的基本数据类型(value): string,普通字符串 hash(哈希),适合存储对象 list(列表),按照插入顺序排序,可以由重复的元素 set(无序集合),没有重复的元素 sorted set(有序集合)&…...
Typescript 枚举类型
枚举是用来表示一组明确的可选值列表 // enum是枚举类型的关键字 //枚举如果不设置值,默认从0开始 enum Direction {Up, // 0 Down, // 1 Left, // 2Right // 3} //如果给第一个值赋值为100,则第二、第三第四个都会在第一个的基础上1 分别是101,102…...
docker小记-容器中启动映射端口号但访问不到
在docker容器中是每一个容器隔离分开的。 每个容器视为一个独立的环境,当在外部环境访问不到的时候就是说明端口号还是没映射到。 之前使用的映射说白了就是将docker中的独立的ip地址端口号映射到主机的ip地址和端口号。这一步没有成功。 docker inspect 容器名 …...
Java中的Map常见使用案例代码
以下是一些Java中Map的常见使用案例和具体代码实现: Map的遍历 Map<String, Integer> map new HashMap<>(); map.put(“apple”, 10); map.put(“banana”, 20); map.put(“orange”, 30); // 遍历方式一:使用entrySet()方法遍历 for (M…...
AI Linux运维——项目部署(一)
一、项目介绍 中州养老系统为养老院量身定制开发专业的养老管理软件产品;涵盖来访管理、入退管理、在住管理、服务管理 、财务管理等功能模块,涉及从来访参观到退住办理的完整流程。 项目原型访问地址:https://codesign.qq.com/s/45927762406…...
Claude中转安全测评出炉:快快云安全Claude中转跻身行业第一梯队
2026年4月,国内AI安全与模型接入服务专项测评发布最新结果,本次测评覆盖传输加密、隐私合规、稳定性、抗攻击、接口兼容五大核心维度,对国内外主流Claude中转服务进行全面检验,快快云安全(快快网络旗下安全品牌&#x…...
【实践】Dify文件下载功能实现与优化指南
1. Dify文件下载功能实现全流程解析 第一次接触Dify文件下载功能时,我也被它独特的存储机制绕晕了。和常见的直接返回文件流的做法不同,Dify的存储类实现更像是"黑箱操作"——文件明明被下载到了指定目录,却找不到返回内容的出口。…...
消费增值积分单边上扬软件源码开发
消费增值积分单边上扬系统开发要点消费增值积分单边上扬系统是一种通过消费行为累积积分,并确保积分价值稳定上升的商业模式。以下是开发此类系统的关键要点:系统架构设计 采用微服务架构分离核心模块,积分管理模块独立部署确保高可用性。数据…...
SpringMVC 请求保姆级教程:路径映射、参数传递、JSON 交互、日期处理一网打尽(Spring系列12)
摘要:SpringMVC 作为 Java Web 开发中最主流的 MVC 框架,核心职责就是接收请求、处理数据、响应结果,这也是 SpringMVC 学习的重中之重。本文将从环境搭建、请求映射、参数传递(普通 / POJO / 数组 / 集合 / JSON / 日期ÿ…...
AI agent开发笔记
AI模型强大程度:google CC > Microsoft copilot 1.在该路径下添加,AI生成规则文档:copilot-instructions.md...
C++一维数组完全指南
一、什么是一维数组?用来一次性存储多个相同类型的数据内存中连续存放有统一的名字,用 ** 下标(索引)** 区分每个元素下标从 0 开始(非常重要)二、定义与初始化(四种常用方式)// 1. …...
【仅限首批200家认证企业获取】Java 25虚拟线程生产就绪检查清单(含JDK25.0.1 Hotfix补丁验证报告)
第一章:Java 25虚拟线程生产就绪核心定义与认证准入机制Java 25正式将虚拟线程(Virtual Threads)从预览特性升级为**生产就绪(Production-Ready)** 的标准特性,其核心定义聚焦于轻量级、高密度、可扩展的并…...
AMD Ryzen SDT调试工具:释放处理器潜能的终极硬件控制方案
AMD Ryzen SDT调试工具:释放处理器潜能的终极硬件控制方案 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…...
Spring Cloud进阶--分布式权限校验OAuth控
一、核心问题及解决方案(按踩坑频率排序) 问题 1:误删他人持有锁——最基础也最易犯的漏洞 成因:释放锁时未做身份校验,直接执行 DEL 命令删除键。典型场景:服务 A 持有锁后,业务逻辑耗时超过锁…...
