android nfc 错误,android - Android NfcA Transceive成功失败 - 堆栈内存溢出

我制作了一个简单的测试应用程序以进行快速调试。 我发送一些字节,打印我在电话屏幕上发送的内容,然后打印我收到的内容。

当我发送WRONG命令时,我在两个字节的SW1SW2中得到了相应的错误代码。 我也可以调用自己的命令,并使用自己的值覆盖SW1SW2,然后可以获取它们。

这是问题所在:当我发送CORRECT命令时,收发命令失败,提示信息为“ Transceive failed”。

如果我发送正确的命令,但将SW1SW2改写为90 00以外的值,那么我将获得我设置的SW值,但没有响应数据。 (可能是因为当SW1SW2 <> 90 00时卡未发送ODATA)

那么,如何确定发送了正确的命令呢? 除了搞乱我自己的测试命令外,我还调用了GetAppId命令-失败,因为我必须在卡中定义AppId。 所以我在卡中定义它,发送相同的命令,收发失败。

因此,我很确定问题是存在ODATA时收发失败,但是我不明白为什么还是要解决它。.请帮助!

编辑:我的卡是ZeitControl的7.5 D非接触式基本卡。

EDIT2:我已将超时设置为2000ms,而行为没有变化。 我正在尝试返回单个字节的数据,而我调用的系统命令听起来也不是很沉重。

然后,我下载并附加了Android源代码并进行了调试。 有一些段它仍然不会进入-但是卡似乎在有效命令上返回null,除非我返回一些手动设置的SW1SW2,在这种情况下,这是唯一收到的东西。

EDIT3:我尝试过的系统命令是:192 14 0 0 0(或C0 0E 00 00 00)(或CLA INS P1 P2 Lc)我不是100%确定我正确地执行了该操作,但是我尝试了Le的各种长度(最多22个)和没有Le的情况相同,只有这样,它不会给我6700(错误的Le / Lc)。当然,不是6700而是返回null,似乎...

我自己定义的另一个命令是20 0A(值以字节为单位),并且.BAS文件中未指定P1 / P2。 我称其为:32 10 1 0 1(或20 0A 01 00 01)(或CLA INS Lc IDATA Le)这应表示1字节数据输入,设置为0和1字节预期输出(+ SW1 / SW2为总是)。 (将P1 / P2设置为6700,因此,除非在命令声明中定义,否则我认为它们不应该存在)。这还将返回null。 我希望00 90 00将在这里返回。 (如果我将“值”设置为00的话)

我正在使用HTC OneX。

EDIT4:MinSdk版本= 14,目标18。

if(bitcoinCard != null){

try {

String sentmsg, receivedmsg;

byte[] send = getBytes(commandBytes.getText().toString());

byte[] data = null;

if(send != null){

bitcoinCard.setTimeout(2000);

data = bitcoinCard.transceive(send);

}

//bitcoinCard.close();

/*if(data != null && data.length == 2)

{

mainLabel.setText("SW1SW2: " + (data[0] < 0 ? -data[0] +

128 : data[0]) + " " + (data[1] < 0 ? -data[1] + 128 : data[1]));

}else */if (data != null && send != null)

{

sentmsg = "" + (send[0] < 0 ? send[0] + 256 : send[0]);

for(int i = 1; i < send.length; i++)

{

sentmsg = sentmsg + " " + (send[i] < 0 ? send[i] +

256 : send[i]);

}

receivedmsg = "" + (data[0] < 0 ? data[0] + 256 : data[0]);

for(int i = 1; i < data.length; i++)

{

receivedmsg = receivedmsg + " " + (data[i] < 0 ? data[i] + 256 : data[i]);

}

mainLabel.setText("Sent: " + sentmsg + "\n" +

"Response: " +

receivedmsg);

}else

{

mainLabel.setText("Sent or received null.");

}

} catch (IOException e) {

mainLabel.setText("Tried to talk to card, but had error: " +

e.getMessage());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值