FileDocCategorySizeDatePackage
NfcA.javaAPI DocAndroid 5.1 API5792Thu Mar 12 22:22:10 GMT 2015android.nfc.tech

NfcA

public final class NfcA extends BasicTagTechnology
Provides access to NFC-A (ISO 14443-3A) properties and I/O operations on a {@link Tag}.

Acquire a {@link NfcA} object using {@link #get}.

The primary NFC-A I/O operation is {@link #transceive}. Applications must implement their own protocol stack on top of {@link #transceive}.

Note: Methods that perform I/O operations require the {@link android.Manifest.permission#NFC} permission.

Fields Summary
private static final String
TAG
public static final String
EXTRA_SAK
public static final String
EXTRA_ATQA
private short
mSak
private byte[]
mAtqa
Constructors Summary
public NfcA(android.nfc.Tag tag)

hide

        super(tag, TagTechnology.NFC_A);
        Bundle extras = tag.getTechExtras(TagTechnology.NFC_A);
        mSak = extras.getShort(EXTRA_SAK);
        mAtqa = extras.getByteArray(EXTRA_ATQA);
    
Methods Summary
public static android.nfc.tech.NfcAget(android.nfc.Tag tag)
Get an instance of {@link NfcA} for the given tag.

Returns null if {@link NfcA} was not enumerated in {@link Tag#getTechList}. This indicates the tag does not support NFC-A.

Does not cause any RF activity and does not block.

param
tag an NFC-A compatible tag
return
NFC-A object


                                                         
         
        if (!tag.hasTech(TagTechnology.NFC_A)) return null;
        try {
            return new NfcA(tag);
        } catch (RemoteException e) {
            return null;
        }
    
public byte[]getAtqa()
Return the ATQA/SENS_RES bytes from tag discovery.

Does not cause any RF activity and does not block.

return
ATQA/SENS_RES bytes

        return mAtqa;
    
public intgetMaxTransceiveLength()
Return the maximum number of bytes that can be sent with {@link #transceive}.

return
the maximum number of bytes that can be sent with {@link #transceive}.

        return getMaxTransceiveLengthInternal();
    
public shortgetSak()
Return the SAK/SEL_RES bytes from tag discovery.

Does not cause any RF activity and does not block.

return
SAK bytes

        return mSak;
    
public intgetTimeout()
Get the current {@link #transceive} timeout in milliseconds.

Requires the {@link android.Manifest.permission#NFC} permission.

return
timeout value in milliseconds

        try {
            return mTag.getTagService().getTimeout(TagTechnology.NFC_A);
        } catch (RemoteException e) {
            Log.e(TAG, "NFC service dead", e);
            return 0;
        }
    
public voidsetTimeout(int timeout)
Set the {@link #transceive} timeout in milliseconds.

The timeout only applies to {@link #transceive} on this object, and is reset to a default value when {@link #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 {@link android.Manifest.permission#NFC} permission.

param
timeout timeout value in milliseconds

        try {
            int err = mTag.getTagService().setTimeout(TagTechnology.NFC_A, timeout);
            if (err != ErrorCodes.SUCCESS) {
                throw new IllegalArgumentException("The supplied timeout is not valid");
            }
        } catch (RemoteException e) {
            Log.e(TAG, "NFC service dead", e);
        }
    
public byte[]transceive(byte[] data)
Send raw NFC-A commands to the tag and receive the response.

Applications must not append the EoD (CRC) to the payload, it will be automatically calculated.

Applications must only send commands that are complete bytes, for example a SENS_REQ is not possible (these are used to manage tag polling and initialization).

Use {@link #getMaxTransceiveLength} to retrieve the maximum number of bytes that can be sent with {@link #transceive}.

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 {@link IOException} if {@link #close} is called from another thread.

Requires the {@link android.Manifest.permission#NFC} permission.

param
data bytes to send
return
bytes received in response
throws
TagLostException if the tag leaves the field
throws
IOException if there is an I/O failure, or this operation is canceled

        return transceive(data, true);