You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter实现NFC跨移动设备文本共享技术问询

Flutter NFC 设备发现与文本互传实现方案

依赖包选择

使用flutter_nfc_kit包,它支持Android和iOS平台的NFC基础操作,包括设备发现、NDEF消息读写,足够满足你的需求。在pubspec.yaml中添加依赖:

dependencies:
  flutter_nfc_kit: ^3.3.0

平台权限配置

Android

在android/app/src/main/AndroidManifest.xml中添加NFC权限和相关配置:

<!-- NFC权限 -->
<uses-permission android:name="android.permission.NFC" />
<!-- 声明设备支持NFC -->
<uses-feature android:name="android.hardware.nfc" android:required="true" />

<!-- 在activity标签内添加前台NFC调度配置 -->
<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-data android:name="android.nfc.action.TECH_DISCOVERED"
           android:resource="@xml/nfc_tech_filter" />

然后在android/app/src/main/res/xml目录下创建nfc_tech_filter.xml文件,内容如下:

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

iOS

在ios/Runner/Info.plist中添加NFC权限描述和NDEF支持:

<key>NFCReaderUsageDescription</key>
<string>需要使用NFC功能进行设备间文本传输</string>
<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
    <string>A0000002471001</string>
</array>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
    <string>NDEF</string>
</array>

核心功能实现

以下是完整的示例代码,实现NFC设备发现、触碰时文本互传:

import 'package:flutter/material.dart';
import 'package:flutter_nfc_kit/flutter_nfc_kit.dart';

class NFCTransferPage extends StatefulWidget {
  const NFCTransferPage({super.key});

  @override
  State<NFCTransferPage> createState() => _NFCTransferPageState();
}

class _NFCTransferPageState extends State<NFCTransferPage> {
  String _status = "未启动NFC监听";
  final TextEditingController _messageController = TextEditingController(text: "Hello NFC!");

  // 初始化并启动NFC监听
  Future<void> _startNFCListener() async {
    try {
      // 检查设备是否支持NFC
      final isAvailable = await FlutterNfcKit.nfcAvailability;
      if (isAvailable != NFCAvailability.available) {
        setState(() {
          _status = "设备不支持NFC或NFC未开启";
        });
        return;
      }

      setState(() {
        _status = "正在监听NFC设备...";
      });

      // 启动NFC会话,监听NDEF消息
      final tag = await FlutterNfcKit.poll(
        timeout: const Duration(seconds: 30),
        pollOptions: const PollOptions(
          iosMultipleTagMessage: true,
          androidEnableReaderMode: true,
        ),
      );

      // 读取标签中的NDEF消息
      if (tag.ndefAvailable!) {
        final ndefMessage = await FlutterNfcKit.readNDEF();
        if (ndefMessage != null && ndefMessage.records.isNotEmpty) {
          final receivedText = String.fromCharCodes(ndefMessage.records.first.payload);
          setState(() {
            _status = "收到消息: $receivedText";
          });
        }
      }

      // 发送当前输入的文本到对方设备
      await FlutterNfcKit.writeNDEF(
        NDEFMessage([
          NDEFRecord.createText(_messageController.text),
        ]),
      );
      setState(() {
        _status = "消息已发送: ${_messageController.text}";
      });

      // 结束会话
      await FlutterNfcKit.finish();
    } catch (e) {
      setState(() {
        _status = "出错: ${e.toString()}";
      });
      await FlutterNfcKit.finish();
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("NFC文本互传")),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _messageController,
              decoration: const InputDecoration(labelText: "输入要发送的文本"),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: _startNFCListener,
              child: const Text("启动NFC监听"),
            ),
            const SizedBox(height: 20),
            Text(_status, style: const TextStyle(fontSize: 16)),
          ],
        ),
      ),
    );
  }
}

关键说明与注意事项

  • 设备要求:两台设备都必须支持NFC,且开启NFC功能(Android通常在设置中开启,iOS需在控制中心或设置中开启)。
  • 触碰逻辑:启动监听后,将两台设备的NFC区域靠近(通常在手机背部),系统会自动检测并完成消息读写。
  • NDEF格式:示例中使用NDEF文本格式,这是NFC设备间互传数据的标准格式,兼容性最好。
  • Android前台调度:Android设备需要在前台开启NFC监听才能稳定检测到其他设备,示例中已通过androidEnableReaderMode配置。
  • iOS限制:iOS的NFC会话只能在前台启动,且需要用户手动触发(比如点击按钮),无法后台自动监听。

内容的提问来源于stack exchange,提问作者Guru Subramani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 10:05:32