java.lang.Object | |
↳ | android.nfc.tech.MifareClassic |
Provides access to MIFARE Classic properties and I/O operations on a
Tag
.
Acquire a
MifareClassic
object using
get(Tag)
.
MIFARE Classic is also known as MIFARE Standard.
MIFARE Classic tags are divided into sectors, and each sector is sub-divided into
blocks. Block size is always 16 bytes (
BLOCK_SIZE
. Sector size varies.
SIZE_MINI
), with 5 sectors each of 4 blocks.
SIZE_1K
), with 16 sectors each of 4 blocks.
SIZE_2K
), with 32 sectors each of 4 blocks.
SIZE_4K
). The first 32 sectors contain 4 blocks
and the last 8 sectors contain 16 blocks.
MIFARE Classic tags require authentication on a per-sector basis before any other I/O operations on that sector can be performed. There are two keys per sector, and ACL bits determine what I/O operations are allowed on that sector after authenticating with a key. and .
Three well-known authentication keys are defined in this class:
KEY_DEFAULT
,
KEY_MIFARE_APPLICATION_DIRECTORY
,
KEY_NFC_FORUM
.
KEY_DEFAULT
is the default factory key for MIFARE Classic.
KEY_MIFARE_APPLICATION_DIRECTORY
is the well-known key for
MIFARE Classic cards that have been formatted according to the
MIFARE Application Directory (MAD) specification.
KEY_NFC_FORUM
is the well-known key for MIFARE Classic cards that
have been formatted according to the NXP specification for NDEF on MIFARE Classic.
Implementation of this class on a Android NFC device is optional.
If it is not implemented, then
MifareClassic
will never be enumerated in
getTechList()
.
If it is enumerated, then all
MifareClassic
I/O operations will be supported,
and
MIFARE_CLASSIC
NDEF tags will also be supported. In either case,
NfcA
will also be enumerated on the tag, because all MIFARE Classic tags are also
NfcA
.
Note:
Methods that perform I/O operations
require the
NFC
permission.
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int | BLOCK_SIZE | Size of a MIFARE Classic block (in bytes) | |||||||||
int | SIZE_1K | Tag contains 16 sectors, each with 4 blocks. | |||||||||
int | SIZE_2K | Tag contains 32 sectors, each with 4 blocks. | |||||||||
int | SIZE_4K | Tag contains 40 sectors. | |||||||||
int | SIZE_MINI | Tag contains 5 sectors, each with 4 blocks. | |||||||||
int | TYPE_CLASSIC | A MIFARE Classic tag | |||||||||
int | TYPE_PLUS | A MIFARE Plus tag | |||||||||
int | TYPE_PRO | A MIFARE Pro tag | |||||||||
int | TYPE_UNKNOWN | A MIFARE Classic compatible card of unknown type |
Fields | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
KEY_DEFAULT | The default factory key. | |||||||||
|
KEY_MIFARE_APPLICATION_DIRECTORY | The well-known key for tags formatted according to the MIFARE Application Directory (MAD) specification. | |||||||||
|
KEY_NFC_FORUM | The well-known key for tags formatted according to the NDEF on MIFARE Classic specification. |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
Authenticate a sector with key A.
|
||||||||||
|
Authenticate a sector with key B.
|
||||||||||
|
Return the sector that contains a given block.
|
||||||||||
|
Disable I/O operations to the tag from this
TagTechnology
object, and release resources.
|
||||||||||
|
Enable I/O operations to the tag from this
TagTechnology
object.
|
||||||||||
|
Decrement a value block, storing the result in the temporary block on the tag.
|
||||||||||
|
Get an instance of
MifareClassic
for the given tag.
|
||||||||||
|
Return the total number of MIFARE Classic blocks.
|
||||||||||
|
Return the number of blocks in the given sector.
|
||||||||||
|
Return the maximum number of bytes that can be sent with
transceive(byte[])
.
|
||||||||||
|
Return the number of MIFARE Classic sectors.
|
||||||||||
|
|
||||||||||
|
Get the
Tag
object backing this
TagTechnology
object.
|
||||||||||
|
Get the current
transceive(byte[])
timeout in milliseconds.
|
||||||||||
|
Return the type of this MIFARE Classic compatible tag.
|
||||||||||
|
Increment a value block, storing the result in the temporary block on the tag.
|
||||||||||
|
Helper to indicate if I/O operations should be possible.
|
||||||||||
|
Read 16-byte block.
|
||||||||||
|
Copy from a value block to the temporary block.
|
||||||||||
|
Return the first block of a given sector.
|
||||||||||
|
Set the
transceive(byte[])
timeout in milliseconds.
|
||||||||||
|
Send raw NfcA data to a tag and receive the response.
|
||||||||||
|
Copy from the temporary block to a value block.
|
||||||||||
|
Write 16-byte block.
|
[Expand]
Inherited Methods
|
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
java.lang.Object
|
|||||||||||
From interface
android.nfc.tech.TagTechnology
|
|||||||||||
From interface
java.io.Closeable
|
|||||||||||
From interface
java.lang.AutoCloseable
|
Size of a MIFARE Classic block (in bytes)
Tag contains 16 sectors, each with 4 blocks.
Tag contains 32 sectors, each with 4 blocks.
Tag contains 40 sectors. The first 32 sectors contain 4 blocks and the last 8 sectors contain 16 blocks.
Tag contains 5 sectors, each with 4 blocks.
A MIFARE Classic tag
A MIFARE Plus tag
A MIFARE Pro tag
A MIFARE Classic compatible card of unknown type
The well-known key for tags formatted according to the MIFARE Application Directory (MAD) specification.
The well-known key for tags formatted according to the NDEF on MIFARE Classic specification.
Authenticate a sector with key A.
Successful authentication of a sector with key A enables other I/O operations on that sector. The set of operations granted by key A key depends on the ACL bits set in that sector. For more information see the MIFARE Classic specification on .
A failed authentication attempt causes an implicit reconnection to the tag, so authentication to other sectors will be lost.
This is an I/O operation and will block until complete. It must
not be called from the main application thread. A blocked call will be canceled with
IOException
if
close()
is called from another thread.
Requires the
NFC
permission.
sectorIndex | index of sector to authenticate, starting from 0 |
---|---|
key | 6-byte authentication key |
TagLostException | if the tag leaves the field |
---|---|
IOException | if there is an I/O failure, or the operation is canceled |
Authenticate a sector with key B.
Successful authentication of a sector with key B enables other I/O operations on that sector. The set of operations granted by key B depends on the ACL bits set in that sector. For more information see the MIFARE Classic specification on .
A failed authentication attempt causes an implicit reconnection to the tag, so authentication to other sectors will be lost.
This is an I/O operation and will block until complete. It must
not be called from the main application thread. A blocked call will be canceled with
IOException
if
close()
is called from another thread.
Requires the
NFC
permission.
sectorIndex | index of sector to authenticate, starting from 0 |
---|---|
key | 6-byte authentication key |
TagLostException | if the tag leaves the field |
---|---|
IOException | if there is an I/O failure, or the operation is canceled |
Return the sector that contains a given block.
Does not cause any RF activity and does not block.
blockIndex | index of block to lookup, starting from 0 |
---|
Disable I/O operations to the tag from this
TagTechnology
object, and release resources.
Also causes all blocked I/O operations on other thread to be canceled and
return with
IOException
.
Requires the
NFC
permission.
IOException |
---|
Enable I/O operations to the tag from this
TagTechnology
object.
May cause RF activity and may block. Must not be called
from the main application thread. A blocked call will be canceled with
IOException
by calling
close()
from another thread.
Only one
TagTechnology
object can be connected to a
Tag
at a time.
Applications must call
close()
when I/O operations are complete.
Requires the
NFC
permission.
IOException |
---|
Decrement a value block, storing the result in the temporary block on the tag.
This is an I/O operation and will block until complete. It must
not be called from the main application thread. A blocked call will be canceled with
IOException
if
close()
is called from another thread.
Requires the
NFC
permission.
blockIndex | index of block to decrement, starting from 0 |
---|---|
value | non-negative to decrement by |
TagLostException | if the tag leaves the field |
---|---|
IOException | if there is an I/O failure, or the operation is canceled |
Get an instance of
MifareClassic
for the given tag.
Does not cause any RF activity and does not block.
Returns null if
MifareClassic
was not enumerated in
getTechList()
.
This indicates the tag is not MIFARE Classic compatible, or this Android
device does not support MIFARE Classic.
tag | an MIFARE Classic compatible tag |
---|
Return the total number of MIFARE Classic blocks.
Does not cause any RF activity and does not block.
Return the number of blocks in the given sector.
Does not cause any RF activity and does not block.
sectorIndex | index of sector, starting from 0 |
---|
Return the maximum number of bytes that can be sent with
transceive(byte[])
.
transceive(byte[])
.
Return the number of MIFARE Classic sectors.
Does not cause any RF activity and does not block.
Get the
Tag
object backing this
TagTechnology
object.
Tag
backing this
TagTechnology
object.
Get the current
transceive(byte[])
timeout in milliseconds.
Requires the
NFC
permission.
Return the type of this MIFARE Classic compatible tag.
One of
TYPE_UNKNOWN
,
TYPE_CLASSIC
,
TYPE_PLUS
or
TYPE_PRO
.
Does not cause any RF activity and does not block.
Increment a value block, storing the result in the temporary block on the tag.
This is an I/O operation and will block until complete. It must
not be called from the main application thread. A blocked call will be canceled with
IOException
if
close()
is called from another thread.
Requires the
NFC
permission.
blockIndex | index of block to increment, starting from 0 |
---|---|
value | non-negative to increment by |
TagLostException | if the tag leaves the field |
---|---|
IOException | if there is an I/O failure, or the operation is canceled |
Read 16-byte block.
This is an I/O operation and will block until complete. It must
not be called from the main application thread. A blocked call will be canceled with
IOException
if
close()
is called from another thread.
Requires the
NFC
permission.
blockIndex | index of block to read, starting from 0 |
---|
TagLostException | if the tag leaves the field |
---|---|
IOException | if there is an I/O failure, or the operation is canceled |
Copy from a value block to the temporary block.
This is an I/O operation and will block until complete. It must
not be called from the main application thread. A blocked call will be canceled with
IOException
if
close()
is called from another thread.
Requires the
NFC
permission.
blockIndex | index of block to copy from |
---|
TagLostException | if the tag leaves the field |
---|---|
IOException | if there is an I/O failure, or the operation is canceled |
Return the first block of a given sector.
Does not cause any RF activity and does not block.
sectorIndex | index of sector to lookup, starting from 0 |
---|
Set the
transceive(byte[])
timeout in milliseconds.
The timeout only applies to
transceive(byte[])
on this object,
and is reset to a default value when
close()
is called.
Setting a longer timeout may be useful when performing transactions that require a long processing time on the tag such as key generation.
Requires the
NFC
permission.
timeout | timeout value in milliseconds |
---|
Send raw NfcA data to a tag and receive the response.
This is equivalent to connecting to this tag via
NfcA
and calling
transceive(byte[])
. Note that all MIFARE Classic
tags are based on
NfcA
technology.
Use
getMaxTransceiveLength()
to retrieve the maximum number of bytes
that can be sent with
transceive(byte[])
.
This is an I/O operation and will block until complete. It must
not be called from the main application thread. A blocked call will be canceled with
IOException
if
close()
is called from another thread.
Requires the
NFC
permission.
IOException |
---|
Copy from the temporary block to a value block.
This is an I/O operation and will block until complete. It must
not be called from the main application thread. A blocked call will be canceled with
IOException
if
close()
is called from another thread.
Requires the
NFC
permission.
blockIndex | index of block to copy to |
---|
TagLostException | if the tag leaves the field |
---|---|
IOException | if there is an I/O failure, or the operation is canceled |
Write 16-byte block.
This is an I/O operation and will block until complete. It must
not be called from the main application thread. A blocked call will be canceled with
IOException
if
close()
is called from another thread.
Requires the
NFC
permission.
blockIndex | index of block to write, starting from 0 |
---|---|
data | 16 bytes of data to write |
TagLostException | if the tag leaves the field |
---|---|
IOException | if there is an I/O failure, or the operation is canceled |