使用 promise 处理 nfc 请求的核心做法是调用 nfcmanager.requesttechnology() 并配合 .then() 和 .catch() 链式调用,或者在 async/await 语法中直接使用 try/catch 块。这样做可以将异步的 nfc 硬件交互转化为同步风格的代码流,确保在用户授权或设备就绪后执行读取逻辑,并在发生错误(如权限被拒、nfc 未开启)时统一捕获处理。

如何初始化 NFC 模块并请求特定技术?
初始化 NFC 模块并请求特定技术需要先在应用启动阶段调用 nfcManager.start(),随后在触发事件(如按钮点击)中调用 nfcManager.requestTechnology(NfcTech.Ndef)。这一步会唤起系统原生的 NFC 授权弹窗,只有当用户允许且设备支持该标签格式时,Promise 才会 resolve,否则进入 catch 分支。

import React, { useEffect } from 'react';
import NfcManager, { nfcManager } from 'react-native-nfc-manager';
const NfcHandler = () => {
const handleReadNfc = async () => {
try {
// 1. 确保 NFC 管理器已启动
await NfcManager.start();
// 2. 请求 NDEF 技术,这会弹出系统授权框
await nfcManager.requestTechnology('ndef');
// 3. 获取标签内容
const tag = await nfcManager.getTag();
console.log('Tag ID:', tag.id);
// 4. 读取 NDEF 消息
const ndef = await nfcManager.readNdefMessage();
if (ndef) {
console.log('Payload:', ndef.payload);
}
} catch (error) {
console.error('NFC Error:', error.code, error.message);
// 常见错误码:-1 (取消), -2 (不支持), -3 (超时)
} finally {
// 5. 释放技术,允许其他应用访问
await nfcManager.cancelTechnologyRequest();
}
};
return (
<button onClick={handleReadNfc}>Scan NFC</button>
);
};
export default NfcHandler;如何处理 NFC 连接中断或后台切换场景?
处理 NFC 连接中断或后台切换场景需要在 requestTechnology 之后注册 setEventListener,监听 disconnectedTag 事件。当用户移开手机或 NFC 信号丢失时,框架会自动触发该事件,此时应调用 cancelTechnologyRequest 来清理状态,防止后续操作因连接断开而抛出不可预期的异常。
立即学习“Java免费学习笔记(深入)”;

import { useEffect } from 'react';
import NfcManager, { nfcManager } from 'react-native-nfc-manager';
const useNfcListeners = () => {
useEffect(() => {
// 监听标签发现
nfcManager.setEventListener('discoveredTag', async (tag) => {
console.log('Tag discovered:', tag.id);
// 在此处处理具体的标签数据
});
// 监听标签断开
nfcManager.setEventListener('disconnectedTag', async (error) => {
console.warn('Tag disconnected:', error);
try {
await nfcManager.cancelTechnologyRequest();
} catch (e) {
console.error('Failed to cancel tech request:', e);
}
});
return () => {
// 组件卸载时清理
nfcManager.destroy();
};
}, []);
};
// 在组件中使用
const App = () => {
useNfcListeners();
return null;
};当 requestTechnology 返回错误码 -1 时代表什么含义?
当 requestTechnology 返回错误码 -1 时,代表用户主动取消了 NFC 授权弹窗或操作。这通常发生在用户点击了“取消”按钮,或者在系统弹窗出现前应用就被切到了后台。在这种情况下,程序不应视为严重错误,而应视为用户意图的中断,通常会直接跳过后续的读取逻辑并恢复 UI 状态。


















