我正在尝试将我的Android平板电脑连接到使用NFC的设备,并从设备中检索数据。
我尝试过什么
按照nfc_device_detection_1.01.pdf(第4章)
中的说明发送命令transceive() 的android java doc提到了
“应用程序不得将SoD(长度)或EoD(CRC)附加到有效负载,它将自动计算”
因此我尝试使用和不使用CRC,有和没有数据包数据长度,但文档不清楚我是否应该留空或者我不应该包括它。
我采取的另一种方法是遵循format_sequence_guidelines_1.1.pdf(同步代码后跟请求)的第2.2章中的图表,但结果相同。
问题
我不知道将什么命令(字节)作为参数发送到transceive()方法。**
问题
有没有人:
代码
transceive()抛出IO异常“标签丢失”。
我认为这是因为我的命令字节不正确(我使用了一系列不同的命令)。
最后的注释(我也厌倦了在一个while循环中放置收发()并且每次都关闭并连接通信)
String action = intent.getAction();
if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
NfcF nfcf = NfcF.get(tag);
nfcf.connect();
byte[] command = new byte[] { (byte) 0x00, (byte) 0x00};
byte[] response = nfcf.transceive(command);
}
如果您的答案需要任何其他信息,请发表评论。谢谢。
答案 0 :(得分:3)
以下是给定目标设备(标记)IDm,FeliCa命令字节和有效负载时如何发送“原始”命令的示例函数:
byte[] rawCmd(NfcF nfcF, byte[] IDm, byte felicaCmd, byte[] payload) throws IOException {
final int len = payload != null ? payload.length : 0;
final byte[] cmd = new byte[10 + len];
cmd[0] = (byte) (10 + len);
cmd[1] = felicaCmd;
System.arraycopy(IDm, 0, cmd, 2, IDm.length);
if (payload != null) {
System.arraycopy(payload, 0, cmd, 10, payload.length);
}
nfcF.transceive(cmd);
}
答案 1 :(得分:0)
我希望这可能会对将来有所帮助。
byte[] transceiveProtocol(NfcF nfcF, int systemCode, int requestCode, int timeSlot) {
byte d0 = 6;
byte d1 = 0;
byte d2 = (byte)(systemCode>> 8 & 0xFF);
byte d3 = (byte)(systemCode>> 0 & 0xFF);
byte d4 = (byte)(requestCode & 0xFF);
byte d5 = (byte)(timeSlot & 0xFF);
byte[] command = { d0, d1, d2, d3, d4, d5 };
return nfcF.transceive(command);
}