我曾尝试使用该标记方法我怎么能读取标签ISO15693 UID
byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
但该值每变化,当我读到标签的时间。
如何读取正确的ISO15693标签ID?
我曾尝试使用该标记方法我怎么能读取标签ISO15693 UID
byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
但该值每变化,当我读到标签的时间。
如何读取正确的ISO15693标签ID?
尝试使用以下
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
byte[] id = tagFromIntent.getId();
获取标签标识符(如果有的话)。 标签标识符是一个低级序列号,用于防冲突和识别。 大多数标签都有一个稳定的唯一标识符(UID),,但某些标签每次发现它们时都会生成一个随机ID (RID),而且有些标签根本没有标识(字节数组将为零 - 大小)。
后你得到的字节数组,你需要十六进制字节数组转换为字符串
试试这个功能:
public String getHexString(byte[] b) {
StringBuffer sb = new StringBuffer();
for (int i=b.length-1; i >= 0; i--){
sb.append(Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
这一个工作,但额外的“如果(i> = 0)”在循环内是多余的。 – 2013-07-29 08:39:51
我偶然发现了同样的问题的解决,幸运的是没有找到我想要什么,这是对这个问题的解决方案。该解决方案来自here的另一个类似帖子。
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
Log.d(TAG, "UID: " + bin2hex(tag.getId()));
//To display the UID
static String bin2hex(byte[] data) {
return String.format("%0" + (data.length * 2) + "X", new BigInteger(1,data));
}
tagFromIntent.getId()也返回不正确的ID。 – king5201 2012-01-04 08:26:33
某些标签返回一个新的随机ID ..请参阅上面的说明 – 2012-01-04 08:35:16
tagFromIntent.getId()的值是一个字节数组,将数据类型更改为字符串并将获得正确的ID。 – king5201 2012-01-05 10:43:32