【问题标题】:Preventing default Android NFC reader阻止默认的 Android NFC 阅读器
【发布时间】:2022-10-19 23:14:24
【问题描述】:

我有这个颤振代码来在阅读时获取 NFC 标签的标识符。使用 nfc_manager 包 (https://pub.dev/packages/nfc_manager)。

运行设备为一加7 Pro。

void _tagRead() {
    NfcManager.instance.startSession(onDiscovered: (NfcTag tag) async {
      Ndef? ndef = Ndef.from(tag);
      result.value = tag.data;
      print('Tag read: ');
      final String identifier = tag.data['ndef']['identifier']
          .map((e) => e.toRadixString(16).padLeft(2, '0'))
          .join('');
      print(identifier);
      NfcManager.instance.stopSession();
    });
  }

问题是,当成功读取标签时,设备默认阅读器会弹出并从应用程序中移除焦点。如何防止这种行为?

【问题讨论】:

标签: android flutter dart nfc


【解决方案1】:

这个解决方案对我有用:

a) 放置在 initState startSession

  @override
  void initState() {
    super.initState();
    NfcManager.instance.startSession(onDiscovered: (NfcTag tag) async {
      if (widget.textToWrite.isEmpty) {
        _tagRead(tag);
      } else {
        _ndefWrite(widget.textToWrite,tag);
      }
    }, onError: (error) async {
      setState(() => _errorMessage = '$error');
    }).catchError((e) => setState(() => _errorMessage = '$e'));
  }

b) 设置 stopSession 来处理

  @override
  void dispose() {
    NfcManager.instance.stopSession().catchError((_) { /* no op */ });
    super.dispose();
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    相关资源
    最近更新 更多