我尝试使用标签方法
byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
但是每次我读取标签时,该值都会发生变化。
如何读取正确的 ISO15693 标签 ID?
获得字节数组后,您需要将十六进制字节数组转换为字符串
试试这个功能:
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();
}
尝试使用以下
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
byte[] id = tagFromIntent.getId();
获取标签标识符(如果有的话)。标签标识符是一个低级序列号,用于防碰撞和识别。大多数标签都有一个稳定的唯一标识符(UID),但有些标签每次被发现时都会生成一个随机ID(RID),还有一些标签根本没有ID(字节数组将是零大小的)。
我碰巧找到了相同问题的解决方案,幸运的是确实找到了我想要的,这是这个问题的解决方案。解决方案来自此处的另一个类似帖子。
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));
}