当前位置: 首页 > news >正文

Android NFC功能开发指南

在 Android 平台上开发 NFC(近场通信)功能,主要涉及以下几个步骤:

1. 权限声明

首先,在 AndroidManifest.xml 文件中声明 NFC 权限:

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

运行 HTML

如果你的应用需要在前台处理 NFC 事件,还需要声明以下权限:

<uses-feature android:name="android.hardware.nfc" android:required="true" />

运行 HTML

2. 配置 AndroidManifest.xml

在 AndroidManifest.xml 中配置 activity,使其能够处理 NFC 事件:

<activity android:name=".YourActivity"><intent-filter><action android:name="android.nfc.action.NDEF_DISCOVERED" /><category android:name="android.intent.category.DEFAULT" /><data android:mimeType="text/plain" /></intent-filter><intent-filter><action android:name="android.nfc.action.TECH_DISCOVERED" /></intent-filter><meta-dataandroid:name="android.nfc.action.TECH_DISCOVERED"android:resource="@xml/nfc_tech_filter" />
</activity>

运行 HTML

3. 创建 NFC 技术过滤文件

在 res/xml 目录下创建一个 XML 文件(例如 nfc_tech_filter.xml),用于指定支持的 NFC 技术:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"><tech-list><tech>android.nfc.tech.Ndef</tech></tech-list>
</resources>

运行 HTML

4. 初始化 NFC 适配器

在你的 Activity 中初始化 NFC 适配器:

import android.nfc.NfcAdapter;
import android.nfc.NfcManager;
import android.content.Context;public class YourActivity extends AppCompatActivity {private NfcAdapter nfcAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);nfcAdapter = manager.getDefaultAdapter();if (nfcAdapter == null) {// 设备不支持 NFCToast.makeText(this, "设备不支持 NFC", Toast.LENGTH_SHORT).show();finish();}}
}

5. 处理 NFC 事件

在 onNewIntent 方法中处理 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];}// 处理 NDEF 消息processNdefMessages(messages);}}
}private void processNdefMessages(NdefMessage[] messages) {for (NdefMessage message : messages) {for (NdefRecord record : message.getRecords()) {if (record.getTnf() == NdefRecord.TNF_WELL_KNOWN && Arrays.equals(record.getType(), NdefRecord.RTD_TEXT)) {// 处理文本记录String text = new String(record.getPayload());Toast.makeText(this, "NFC 数据: " + text, Toast.LENGTH_SHORT).show();}}}
}

6. 启用前台调度

在 onResume 和 onPause 方法中启用和禁用前台调度:

@Override
protected void onResume() {super.onResume();if (nfcAdapter != null) {PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);nfcAdapter.enableForegroundDispatch(this, pendingIntent, null, null);}
}@Override
protected void onPause() {super.onPause();if (nfcAdapter != null) {nfcAdapter.disableForegroundDispatch(this);}
}

7. 写入 NFC 标签

如果你想写入 NFC 标签,可以使用以下代码:

private void writeNdefTag(NdefMessage message, Tag tag) {Ndef ndef = Ndef.get(tag);if (ndef != null) {try {ndef.connect();ndef.writeNdefMessage(message);Toast.makeText(this, "写入成功", Toast.LENGTH_SHORT).show();} catch (IOException | FormatException e) {e.printStackTrace();Toast.makeText(this, "写入失败", Toast.LENGTH_SHORT).show();} finally {try {ndef.close();} catch (IOException e) {e.printStackTrace();}}}
}

8. 测试 NFC 功能

确保你的设备支持 NFC 功能,并使用 NFC 标签进行测试。

9. 处理不同 NFC 标签类型

根据不同的 NFC 标签类型(如 NDEF、MIFARE 等),你可能需要处理不同的技术栈。可以参考 Android 官方文档了解更多细节。

10. 参考文档

  • Android NFC 官方文档

通过以上步骤,你可以在 Android 应用中实现基本的 NFC 功能。根据具体需求,你可能需要进一步扩展和优化代码。

http://www.lryc.cn/news/543129.html

相关文章:

  • 基于Matlab实现汽车远近光灯识别的详细步骤及代码示例
  • nginx反向代理以及负载均衡(常见案例)
  • Spring 三级缓存机制(解决循环依赖)
  • 第4章 4.4 EF Core数据库迁移 Add-Migration UpDate-Database
  • web安全——web应用程序技术
  • low rank decomposition如何用于矩阵的分解
  • GO 进行编译时插桩,实现零码注入
  • 编写一个程序,输入一个字符串并输出其长度(Java版)
  • C++ day4 练习
  • 深入理解指针2
  • 【STL专题】优先级队列priority_queue的使用和模拟实现,巧妙利用仿函数解决优先级
  • CPU、SOC、MPU、MCU--详细分析四者的区别
  • Node.js 内置模块简介(带示例)
  • 常见的“锁”有哪些?
  • 二级公共基础之数据库设计基础(一) 数据库系统的基本概念
  • ollama无法通过IP:11434访问
  • 简单易懂,解析Go语言中的struct结构体
  • java给钉钉邮箱发送邮件
  • C++和OpenGL实现3D游戏编程【连载23】——几何着色器和法线可视化
  • 大连本地知识库的搭建--数据收集与预处理_01
  • github 推送的常见问题以及解决
  • stm32单片机个人学习笔记16(SPI通信协议)
  • Linux | RHEL / CentOS 中 YUM history / downgrade 命令回滚操作
  • BGP状态和机制
  • 温湿度监控设备融入智慧物联网
  • smolagents学习笔记系列(五)Tools-in-depth-guide
  • 前端面试真题 2025最新版
  • 面试八股文--数据库基础知识总结(1)
  • 10. docker nginx官方镜像使用方法
  • [Web 安全] PHP 反序列化漏洞 —— PHP 反序列化漏洞演示案例