| 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 |