android - 来自 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
我怎样才能从中发送我的短信(应该是“我的短信”)?
解决方案
在这种情况下,ndefRecord.payload
is 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)
推荐阅读
- identityserver4 - 401 blazor wasm + identityserver中如何配置网站域名和IP同时运行?
- python - 尝试创建在 6 次错误输入用户名和密码后退出的程序
- swift - 如何确保firebase数据始终是一个数组?
- android - 从项目目录读取本地文件 | Kotlin 多平台移动 | 知识管理系统
- c# - ASP.NET CORE MVC | System.ArgumentNullException : '值不能为空。' | Configuration.GetConnectionString
- python - Lambda 函数在此代码中如何工作?
- node.js - 令人难以置信的缓慢的 Angular 源地图构建
- c# - 在 C# MVC 中设置默认路由
- angular - MVP 与自定义指令
- java - 有没有办法让 gradle 在构建另一个子项目之前构建一个子项目依赖项?