android nfc settimeout,Android nfcA.connect(),nfcA.transceive(),nfcA.setTimeout()和nfcA.getMaxTransce...

Michael Rola..

8

1. WRITE命令的结果数组是一个值为10的单字节.这是什么意思,我应该注意哪些其他值?

值10(十六进制中的Ah或二进制表示中的1010b)是显式ACK,当不返回数据的命令成功时返回确认.

可能的值是实际数据,ACK,被动ACK或NACK.这些由NFC论坛数字协议规范和NFC论坛类型2标签操作规范定义.

如果预期命令在成功时返回实际数据,则返回数据而不是显式ACK值.

ACK被定义为4比特短帧(参见NFC论坛数字协议规范和ISO/IEC 14443-3以获得更多细节),其值为1010b(Ah).

被动ACK被定义为在特定超时内根本不发送响应的标签.

NACK定义为4位短帧,其值为0x0xb(其中x为0或1).

NTAG213/215/216产品数据表对可能的NACK值更加具体:

0000b(0h)表示无效的命令参数.

0001b(1h)表示奇偶校验或CRC错误.

0100b(4h)表示认证计数器溢出无效.

0101b(5h)表示EEPROM写入错误.

除了上述之外,某些设备上的NFC堆栈实现不会将NACK响应正确地传播到app.相反,他们要么抛出,TagLostException要么返回null.同样,您可能(?)得到一个TagLostException指示被动ACK.

因此,您通常会检查以下的收发方法的结果(除非您发送预期会导致被动ACK的命令):

try {

response = nfca.transceive(command);

if (response == null) {

// either communication to the tag was lost or a NACK was received

} else if ((response.length == 1) && ((response[0] & 0x00A) != 0x00A)) {

// NACK response according to Digital Protocol/T2TOP

} else {

// success: response contains ACK or actual data

}

} catch (TagLostException e) {

// either communication to the tag was lost or a NACK was received

}

2.我希望READ方法返回4个字节的用户数据(即与pageNum对应的4个字节),但它返回16个字节.为什么会这样?

READ命令被定义为返回以指定的块编号开始的4个数据块(在NFC论坛类型2标签操作规范中).因此,如果您发送块4的READ命令,则会获得块4,5,6和7的数据.

3. nfcA.isConnected()在打电话之前检查是否是一种好的做法nfcA.connect(),如果是这样的话,这样做是否有可能造成重大的性能损失?

如果Tag直接从NFC系统服务接收句柄(通过NFC意图),则不会连接标签.因此,除非您Tag在致电前使用手柄,否则nfca.connect()我不明白为什么您之前要打电话nfca.isConnected().但是,在连接之前调用该方法几乎没有任何性能开销,因为调用isConnected()封闭标记技术对象将由famework API处理而不调用NFC系统服务.因此,它比对象if的布尔成员变量的简单开销要少得多NfcA.

4. nfcA.setTimeout()之前或之后打电话会更好nfcA.connect()吗?

我不确定那一个.但是,通常在断开标签技术时重置收发超时.

5.对于我的NTAG213标签nfcA.getMaxTransceiveLength()返回253.这是否真的意味着我可以一次写入最多251个字节的用户数据(加上另外2个字节),如果是这样,那是可取的,或者编写每个页面更好( 4个字节)单独nfcA.transceive()调用?

不,你一次只能写一个块.这受到NTAG213的WRITE命令的限制,该命令仅支持一个块作为数据输入.

但是,收发缓冲区大小为253允许您使用FAST_READ命令一次读取多个块(最多62个,NTAG213最多45个):

int firstBlockNum = 0;

int lastBlockNum = 42;

byte[] result = nfcA.transceive(new byte[] {

(byte)0x3A, // FAST_READ

(byte)(firstBlockNum & 0x0ff),

(byte)(lastBlockNum & 0x0ff),

});

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值