获取NFC标签序列号

3

这是我第一次使用NFC进行项目开发。我希望能够简单地获取NFC标签的ID。我一直在遵循这篇文章中的回答。以下是代码:

public void onResume() {
        super.onResume();

    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {

        Toast.makeText(this,"NFC on resume working",Toast.LENGTH_LONG).show();
        byte[] tagId = getIntent().getByteArrayExtra(NfcAdapter.EXTRA_ID);
        Log.i("EHEHEHEHEHE",tagId + "");
    }
//process the msgs array
}

这是代码的响应结果:

07-06 22:07:29.804  16729-16729/za.co.bookbay.nfcplay I/EHEHEHEHEHE﹕ [B@423a1e18
07-06 22:08:08.644  16729-16729/za.co.bookbay.nfcplay I/EHEHEHEHEHE﹕ [B@423bfde0
07-06 22:08:09.574  16729-16729/za.co.bookbay.nfcplay I/EHEHEHEHEHE﹕ [B@423d6ec8

现在这个数字一直在变化,因此我认为上述代码没有获取标签序列号,或者是正确的。如果是这样,那么导致数字改变的原因是什么?

3个回答

7
你正在打印byte[]对象,而不是它的内容。这就是为什么你在输出中得到[B@SomeAddress的原因。
要打印ID,你可以使用类似以下的代码:
String hexdump = new String();
for (int i = 0; i < tagId.length; i++) {
  String x = Integer.toHexString(((int) tagId[i] & 0xff));
  if (x.length() == 1) { 
    x = '0' + x;
  }
  hexdump += x + ' ';
}
Log.i("EHEHEHEHEHE",hexdump);

可能有更好的方法将字节数组转换为十六进制字符串,Java不是我最喜欢的编程语言。


1
在Kotlin中:
var st = ""
val msg = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID)
if (msg != null) {
  st = msg.joinToString(separator = ":"){ eachByte -> "%02x".format(eachByte) }
}

将输出类似以下内容:
04:53:b0:b0:b3:4b:10

我也在用NFC做我的第一个项目。 我得到了一个较短的结果,这个正确吗? "37:c3:81:1c" - undefined
1
有许多NFC读卡器可以获取序列号,你可以从谷歌应用商店下载并尝试验证。 - undefined
是的,我们已经弄清楚了。谢谢你! - undefined

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接