这是我与NFC合作的第一个项目。我只想获取NFC标签的ID。我一直在关注此post的响应。这是代码:
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
现在,这个数字一直在变化,因此使我相信上面的代码没有获得标签的序列号或这个数字是正确的。如果是的话,号码更改的原因是什么?
您正在打印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不是我最喜欢的编程语言)
您可以使用@Roland发布的一个小函数将ByteArray直接转换为HexString: