FileDocCategorySizeDatePackage
NfcF.javaAPI DocAndroid 5.1 API5754Thu Mar 12 22:22:10 GMT 2015android.nfc.tech

NfcF

public final class NfcF extends BasicTagTechnology
Provides access to NFC-F (JIS 6319-4) properties and I/O operations on a {@link Tag}.

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

The primary NFC-F 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_SC
public static final String
EXTRA_PMM
private byte[]
mSystemCode
private byte[]
mManufacturer
Constructors Summary
public NfcF(android.nfc.Tag tag)

hide

        super(tag, TagTechnology.NFC_F);
        Bundle extras = tag.getTechExtras(TagTechnology.NFC_F);
        if (extras != null) {
            mSystemCode = extras.getByteArray(EXTRA_SC);
            mManufacturer = extras.getByteArray(EXTRA_PMM);
        }
    
Methods Summary
public static android.nfc.tech.NfcFget(android.nfc.Tag tag)
Get an instance of {@link NfcF} for the given tag.

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

Does not cause any RF activity and does not block.

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


                                                         
         
        if (!tag.hasTech(TagTechnology.NFC_F)) return null;
        try {
            return new NfcF(tag);
        } catch (RemoteException e) {
            return null;
        }
    
public byte[]getManufacturer()
Return the Manufacturer bytes from tag discovery.

Does not cause any RF activity and does not block.

return
Manufacturer bytes

      return mManufacturer;
    
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 byte[]getSystemCode()
Return the System Code bytes from tag discovery.

Does not cause any RF activity and does not block.

return
System Code bytes

      return mSystemCode;
    
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_F);
        } 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_F, 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-F commands to the tag and receive the response.

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

Use {@link #getMaxTransceiveLength} to retrieve the maximum amount 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);