NFC标签中的意外文本

时间:2018-12-12 20:08:53

标签: android kotlin nfc

我是第一次使用NFC制作应用程序。 在我的标签中,我有数据MimeType记录类型(application / json
数据:“我的文字”)。

这是我的代码:

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

如何从中发送短信(应为“我的短信”)?

2 个答案:

答案 0 :(得分:0)

在这种情况下,ndefRecord.payloadByteArray,所以您看到的是Object类型的默认打印输出([B用于字节数组; {{ 1}}作为内存地址)。

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

String

答案 1 :(得分:0)

例如:

if (rawMessages != null) {
    val messages = arrayOfNulls<NdefMessage?>(rawMessages.size)
    for (i in rawMessages.indices) {
        messages[i] = rawMessages[i] as NdefMessage;
    }         
    processNdefMessages(messages)
}

和:

private fun processNdefMessages(ndefMessages: Array<NdefMessage?>) {
    for (curMsg in ndefMessages) {
        if (curMsg != null) {

            logMessage("Message", curMsg.toString())
            logMessage("Records", curMsg.records.size.toString())

            for (curRecord in curMsg.records) {
                if (curRecord.toUri() != null) {
                    logMessage("- URI", curRecord.toUri().toString())
                } else {
                    logMessage("- Contents", curRecord.payload.contentToString())
                }
            }
        }
    }
}