我是第一次使用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
如何从中发送短信(应为“我的短信”)?
答案 0 :(得分:0)
在这种情况下,ndefRecord.payload
是ByteArray
,所以您看到的是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())
}
}
}
}
}