【发布时间】:2015-02-09 08:27:55
【问题描述】:
我正在尝试使用 nfc android 库读取 ISO15693 RFID 标签:
这里是标签的更多信息:http://img42.com/gw07d+
标签ID被正确读取,但标签中的数据不正确。
onCreate方法:
// initialize NFC
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
nfcPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, this.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
onNewIntent方法:
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction()) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) {
currentTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
byte[] id = currentTag.getId();
Tag_data_TextDisplay.setText("TagId:" + Common.getHexString(id));
for (String tech : currentTag.getTechList()) {
if (tech.equals(NfcV.class.getName())) {
NfcV nfcvTag = NfcV.get(currentTag);
try {
nfcvTag.connect();
txtType.setText("Hello NFC!");
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "Could not open a connection!", Toast.LENGTH_SHORT).show();
return;
}
try {
byte[] cmd = new byte[]{
(byte) 0x00, // Flags
(byte) 0x23, // Command: Read multiple blocks
(byte) 0x00, // First block (offset)
(byte) 0x04 // Number of blocks
};
byte[] userdata = nfcvTag.transceive(cmd);
userdata = Arrays.copyOfRange(userdata, 0, 32);
txtWrite.setText("DATA:" + Common.getHexString(userdata));
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "An error occurred while reading!", Toast.LENGTH_SHORT).show();
return;
}
}
}
}
userdata 在收发方法完成后包含一个值为 0x02 ({ 0x02 }) 的单个字节。
【问题讨论】:
-
应该读什么?
-
@RandykaYudhistira 我在哪里读到标签img42.com/mHBPa+
-
如果您能向我们展示
nfcvTag.transceive(cmd);的实际结果(不填充到 32 个字节),将会很有帮助。此外,您能否确保您的字节数组到十六进制转换将每个字节填充为两个十六进制数字(否则将难以解释该值)。 -
@MichaelRoland 我用字节到十六进制转换器更新了问题:这是 .transceive img42.com/7c30r+ 的结果
-
你能说说你的普通班发生了什么吗?你能分享一下你的普通类的代码吗
标签: android nfc rfid iso-15693