【问题标题】:Cannot write NFC on Android无法在 Android 上写入 NFC
【发布时间】:2021-06-28 09:06:13
【问题描述】:
public boolean writeTag(Tag tag, NdefMessage message) {
    int size = message.toByteArray().length;

    try {
        Ndef ndef = Ndef.get(tag);
        if (ndef != null) {
            ndef.connect();
            if (!ndef.isWritable()) {
                return false;
            }
            if (ndef.getMaxSize() < size) {
                return false;
            }
            ndef.writeNdefMessage(message);
            return true;
        } else {
            NdefFormatable format = NdefFormatable.get(tag);
            if (format != null) {
                try {
                    format.connect();
                    format.format(message);
                    return true;
                } catch (IOException e) {
                    return false;
                }
            } else {
                return false;
            }
        }
    } catch (Exception e) {
        return false;
    }
}

当我调试时,我得到了:

this = {NFCWrite@9357} 
tag = {Tag@9386} "TAG: Tech [android.nfc.tech.IsoDep, android.nfc.tech.NfcA]"
message = {NdefMessage@9417} "NdefMessage [NdefRecord tnf=2 type=6A7A6A736A64646A64 payload=6A7A6A736A64646A64]"
size = 21
ndef = null
format = null

mTechStringList = {String[2]@9587} 
 0 = "android.nfc.tech.IsoDep"
 1 = "android.nfc.tech.NfcA"

我很想知道为什么

  • ndef 总是返回 null
  • 格式总是返回 null

因此,ndef.connect() 无法连接。 然后我使用 NdefFormatable 格式获取标记 但仍然为空。

【问题讨论】:

    标签: android nfc payment


    【解决方案1】:

    并非所有 NFC 标签都支持 Ndef 数据格式。一些标签可以使用适当的编码方法来支持它。

    由于您的标签未将 android.nfc.tech.Ndefandroid.nfc.tech.NdefFormatable 列为支持的 Tech 类型,因此此标签不支持使用 NFC 标准存储 Ndef 数据

    (由于您没有指定标签品牌和型号,因此如果它可以使用支持编码方法支持 Ndef 是不可能的,但这可能无济于事,因为许多其他读者无论如何都不会阅读支持编码的标签)

    更新:

    标签支持两个标签技术IsoDepNfcA,这两个标签都有一个transceive 方法来使用IsoDep 向标签发送命令 (ISO 14443-4) 是NfcA 之上的更高级别协议

    您可能能够发送命令来读取和可能写入标签,但具体如何执行此操作取决于标签的品牌和型号,因为您没有指定标签的品牌和型号无法找到该标签的数据表来识别这些命令是什么。

    【讨论】:

    • 那么您有什么建议让我们编写并准备好标签 NFC 吗?现在我们正在为 NFC 寻找读写标签的解决方案。
    • 添加了更新,但该问题缺乏进一步回答的信息。
    • 进程:com.example.peng.nfcreadwrite,PID:23272 java.lang.NullPointerException:尝试在空对象上调用虚拟方法“void android.nfc.tech.Ndef.connect()”参考我得到这样的错误。
    • 您好,先生,您能否分享一些关于写入标签或如何使用 NFC 在手机设备和手机设备之间创建应用程序支付的解决方案。我坚持不能写标签,当得到这样的标签时:
    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    相关资源
    最近更新 更多