首页 > 解决方案 > 来自 NFC 标签的意外文本

问题描述

我第一次使用 NFC 制作应用程序。在我的标签中,我有数据 MimeType 记录类型( application/json
Data: "My text" )。

这是我的代码:

private fun processIntent(checkIntent: Intent) {

    if (checkIntent.action == NfcAdapter.ACTION_NDEF_DISCOVERED) {

        // pobieranie wiadomości NDEF z taga NFC
        val rawMessages = checkIntent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)

        // wiadomość NDEF zawiera wszystkie rekordy z tagu NFC
        var ndefMsg = rawMessages[0] as NdefMessage

        // pojedynczy 1 rekord z tagu NFC ( indeks 0 to 1 rekord, indeks 1 to 2 rekord itd. )
        var ndefRecord = ndefMsg.records[0]

        // jeśli 1 rekord nie jest pusty to pobierz PAYLOAD ( dane ) i wyświetl go
        // jeśli 1 rekord jest pusty wyświetl błąd
        if(ndefRecord.toMimeType() != null)
        {
            Log.v("processIntent", ndefRecord.payload.toString())
            var payload = ndefRecord.payload.toString()


            textView.text = payload
            var i = 2
        }
        else
        {
            Log.e("processIntent", "ERROR A1")
        }

    }
}

在 LogCat 我有这个:

V/processIntent: [B@82162f9

我怎样才能从中发送我的短信(应该是“我的短信”)?

标签: androidkotlinnfc

解决方案


在这种情况下,ndefRecord.payloadis a ByteArray,所以您看到的是Object类型的默认打印输出([B对于字节数组;@82162f9对于内存地址)。

您需要将其转换为String. 这取决于标签数据的编码方式,这取决于标签创建者。但是,假设它是 UTF-8 或 ASCII,您可以只使用String构造函数:

val payloadString = String(ndefRecord.payload, StandardCharsets.US_ASCII)
val payloadString = String(ndefRecord.payload, StandardCharsets.UTF_8)

推荐阅读