public final class IsoDep
extends Object
implements TagTechnology
java.lang.Object | |
↳ | android.nfc.tech.IsoDep |
在Tag上提供对ISO-DEP(ISO 14443-4)属性和I / O操作的 Tag
。
主要的ISO-DEP I / O操作是transceive(byte[])
。 应用程序必须在transceive(byte[])
之上实现自己的协议栈。
在 getTechList()
中列举 IsoDep
技术的标签也将枚举 NfcA
或 NfcB
(因为IsoDep建立在这两者之上)。
注意:执行I / O操作的方法需要 NFC
权限。
Public methods |
|
---|---|
void |
close() 禁用对此 |
void |
connect() 启用对此 |
static IsoDep |
get(Tag tag) 获取给定标签的 |
byte[] |
getHiLayerResponse() 为 |
byte[] |
getHistoricalBytes() 返回 |
int |
getMaxTransceiveLength() 返回可以使用 |
Tag |
getTag() 获取 |
int |
getTimeout() 以毫秒为单位获取 |
boolean |
isConnected() 帮助者指出I / O操作是否可行。 |
boolean |
isExtendedLengthApduSupported() 标准APDU具有1字节长度字段,允许最多255个有效载荷字节,这导致最大APDU长度为261字节。 |
void |
setTimeout(int timeout) 以毫秒为单位设置 |
byte[] |
transceive(byte[] data) 将原始ISO-DEP数据发送到标签并接收响应。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface android.nfc.tech.TagTechnology
|
|
From interface java.io.Closeable
|
|
From interface java.lang.AutoCloseable
|
void close ()
禁用对此 TagTechnology
对象标记的I / O操作,并释放资源。
还会导致其他线程上的所有被阻止的I / O操作被取消,并以 IOException
返回。
需要 NFC
权限。
Throws | |
---|---|
IOException |
void connect ()
启用来自此 TagTechnology
对象的标记的I / O操作。
可能导致RF活动并可能阻塞。 不能从主应用程序线程调用。 被阻止的呼叫将被IOException
通过从另一个线程调用close()
被取消。
一次只能有一个 TagTechnology
对象连接到 Tag
。
当I / O操作完成时,应用程序必须调用 close()
。
需要 NFC
权限。
Throws | |
---|---|
IOException |
IsoDep get (Tag tag)
获取给定标签的 IsoDep
实例。
不会导致任何RF活动并且不会阻止。
在IsoDep
中未列举getTechList()
返回null。 这表明标签不支持ISO-DEP。
Parameters | |
---|---|
tag |
Tag : an ISO-DEP compatible tag |
Returns | |
---|---|
IsoDep |
ISO-DEP object |
byte[] getHiLayerResponse ()
返回 NfcB
标签的更高层响应字节。
不会导致任何RF活动并且不会阻止。
较高层响应字节可用于帮助识别标签。 它们仅出现在基于NfcB
射频技术的IsoDep
标签上。 如果此标记不是NfcB
则返回null。
在ISO 14443-4术语中,高层字节是ATTRIB响应的一个子集。
Returns | |
---|---|
byte[] |
ISO-DEP historical bytes, or null if this is not a NfcB tag |
byte[] getHistoricalBytes ()
返回 NfcA
标签的ISO-DEP历史字节。
不会导致任何RF活动并且不会阻止。
历史字节可用于帮助识别标签。 它们仅出现在基于NfcA
射频技术的IsoDep
标签上。 如果这个标签不是NfcA
则返回null。
在ISO 14443-4术语中,历史字节是RATS响应的子集。
Returns | |
---|---|
byte[] |
ISO-DEP historical bytes, or null if this is not a NfcA tag |
int getMaxTransceiveLength ()
返回可以通过 transceive(byte[])
发送的最大字节数。
Returns | |
---|---|
int |
the maximum number of bytes that can be sent with transceive(byte[]) . |
Tag getTag ()
获取 Tag
对象支持此 TagTechnology
对象。
Returns | |
---|---|
Tag |
the Tag backing this TagTechnology object. |
int getTimeout ()
以毫秒为单位获取 transceive(byte[])
的当前超时 transceive(byte[])
。
需要 NFC
权限。
Returns | |
---|---|
int |
timeout value in milliseconds |
boolean isConnected ()
帮助者指出I / O操作是否可行。
如果返回true connect()
已经完成,并 close()
没有被调用,并且 Tag
不知道是超出范围。
不会导致射频活动,也不会阻止。
Returns | |
---|---|
boolean |
true if I/O operations should be possible |
boolean isExtendedLengthApduSupported ()
标准APDU具有1字节长度字段,允许最多255个有效载荷字节,这导致最大APDU长度为261字节。
扩展长度APDU具有3字节长度字段,允许65535个有效载荷字节。
一些NFC适配器,如Nexus S和Galaxy Nexus中使用的适配器不支持扩展长度的APDU。 但预计他们在未来将得到很好的支持。 使用此方法检查扩展长度APDU支持。
Returns | |
---|---|
boolean |
whether the NFC adapter on this device supports extended length APDUs. |
void setTimeout (int timeout)
以毫秒为单位设置 transceive(byte[])
的超时时间。
超时仅适用于ISO-DEP transceive(byte[])
,并在 close()
时重置为默认值。
在标签上执行需要较长处理时间的事务(例如密钥生成)时,设置较长的超时时间可能很有用。
需要 NFC
权限。
Parameters | |
---|---|
timeout |
int : timeout value in milliseconds |
byte[] transceive (byte[] data)
将原始ISO-DEP数据发送到标签并接收响应。
应用程序只能发送INF有效负载,而不能发送帧开始和帧结束指示符。 应用程序不需要对有效负载进行分段,如果超出FSD / FSC限制,应用程序将自动分段并进行碎片整理, transceive(byte[])
。
使用 getMaxTransceiveLength()
检索可以与发送的字节的最大数量 transceive(byte[])
。
这是一个I / O操作,将阻塞直到完成。 它不能从主应用程序线程调用。 如果从另一个线程调用close()
被阻止的呼叫将被IOException
取消。
需要 NFC
权限。
Parameters | |
---|---|
data |
byte : command bytes to send, must not be null |
Returns | |
---|---|
byte[] |
response bytes received, will not be null |
Throws | |
---|---|
|
if the tag leaves the field |
IOException |
if there is an I/O failure, or this operation is canceled |