IT. Expert System.

Android Reference

NdefRecord


android.nfc

Class NdefRecord

  • All Implemented Interfaces:
    Parcelable


    public final class NdefRecord
    extends Object
    implements Parcelable
    Represents an immutable NDEF Record.

    NDEF (NFC Data Exchange Format) is a light-weight binary format, used to encapsulate typed data. It is specified by the NFC Forum, for transmission and storage with NFC, however it is transport agnostic.

    NDEF defines messages and records. An NDEF Record contains typed data, such as MIME-type media, a URI, or a custom application payload. An NDEF Message is a container for one or more NDEF Records.

    This class represents logical (complete) NDEF Records, and can not be used to represent chunked (partial) NDEF Records. However NdefMessage.NdefMessage(byte[]) can be used to parse a message containing chunked records, and will return a message with unchunked (complete) records.

    A logical NDEF Record always contains a 3-bit TNF (Type Name Field) that provides high level typing for the rest of the record. The remaining fields are variable length and not always present:

    • type: detailed typing for the payload
    • id: identifier meta-data, not commonly used
    • payload: the actual payload

    Helpers such as createUri(android.net.Uri), createMime(java.lang.String, byte[]) and createExternal(java.lang.String, java.lang.String, byte[]) are included to create well-formatted NDEF Records with correctly set tnf, type, id and payload fields, please use these helpers whenever possible.

    Use the constructor NdefRecord(short, byte[], byte[], byte[]) if you know what you are doing and what to set the fields individually. Only basic validation is performed with this constructor, so it is possible to create records that do not confirm to the strict NFC Forum specifications.

    The binary representation of an NDEF Record includes additional flags to indicate location with an NDEF message, provide support for chunking of NDEF records, and to pack optional fields. This class does not expose those details. To write an NDEF Record as binary you must first put it into an NdefMessage, then call NdefMessage.toByteArray().

    NdefMessage and NdefRecord implementations are always available, even on Android devices that do not have NFC hardware.

    NdefRecords are intended to be immutable (and thread-safe), however they may contain mutable fields. So take care not to modify mutable fields passed into constructors, or modify mutable fields obtained by getter methods, unless such modification is explicitly marked as safe.

    See Also:
    NfcAdapter.ACTION_NDEF_DISCOVERED, NdefMessage
    • Field Detail

      • TNF_EMPTY

        public static final short TNF_EMPTY
        Indicates the record is empty.

        Type, id and payload fields are empty in a TNF_EMPTY record.

        See Also:
        Constant Field Values
      • TNF_UNKNOWN

        public static final short TNF_UNKNOWN
        Indicates the payload type is unknown.

        NFC Forum explains this should be treated similarly to the "application/octet-stream" MIME type. The payload type is not explicitly encoded within the record.

        The type field is empty in an TNF_UNKNOWN record.

        See Also:
        Constant Field Values
      • TNF_UNCHANGED

        public static final short TNF_UNCHANGED
        Indicates the payload is an intermediate or final chunk of a chunked NDEF Record.

        TNF_UNCHANGED can not be used with this class since all NdefRecords are already unchunked, however they may appear in the binary format.

        See Also:
        Constant Field Values
      • TNF_RESERVED

        public static final short TNF_RESERVED
        Reserved TNF type.

        The NFC Forum NDEF Specification v1.0 suggests for NDEF parsers to treat this value like TNF_UNKNOWN.

        See Also:
        Constant Field Values
      • RTD_TEXT

        public static final byte[] RTD_TEXT
        RTD Text type. For use with TNF_WELL_KNOWN.
        See Also:
        TNF_WELL_KNOWN
      • RTD_URI

        public static final byte[] RTD_URI
        RTD URI type. For use with TNF_WELL_KNOWN.
        See Also:
        TNF_WELL_KNOWN
      • RTD_SMART_POSTER

        public static final byte[] RTD_SMART_POSTER
        RTD Smart Poster type. For use with TNF_WELL_KNOWN.
        See Also:
        TNF_WELL_KNOWN
      • RTD_ALTERNATIVE_CARRIER

        public static final byte[] RTD_ALTERNATIVE_CARRIER
        RTD Alternative Carrier type. For use with TNF_WELL_KNOWN.
        See Also:
        TNF_WELL_KNOWN
      • RTD_HANDOVER_CARRIER

        public static final byte[] RTD_HANDOVER_CARRIER
        RTD Handover Carrier type. For use with TNF_WELL_KNOWN.
        See Also:
        TNF_WELL_KNOWN
      • RTD_HANDOVER_REQUEST

        public static final byte[] RTD_HANDOVER_REQUEST
        RTD Handover Request type. For use with TNF_WELL_KNOWN.
        See Also:
        TNF_WELL_KNOWN
      • RTD_HANDOVER_SELECT

        public static final byte[] RTD_HANDOVER_SELECT
        RTD Handover Select type. For use with TNF_WELL_KNOWN.
        See Also:
        TNF_WELL_KNOWN
      • RTD_ANDROID_APP

        public static final byte[] RTD_ANDROID_APP
        RTD Android app type. For use with TNF_EXTERNAL.

        The payload of a record with type RTD_ANDROID_APP should be the package name identifying an application. Multiple RTD_ANDROID_APP records may be included in a single NdefMessage.

        Use createApplicationRecord(String) to create RTD_ANDROID_APP records.

    • Constructor Detail

      • NdefRecord

        public NdefRecord(short tnf,
                  byte[] type,
                  byte[] id,
                  byte[] payload)
        Construct an NDEF Record from its component fields.

        Recommend to use helpers such as {#createUri} or {createExternal(java.lang.String, java.lang.String, byte[]) where possible, since they perform stricter validation that the record is correctly formatted as per NDEF specifications. However if you know what you are doing then this constructor offers the most flexibility.

        An NdefRecord represents a logical (complete) record, and cannot represent NDEF Record chunks.

        Basic validation of the tnf, type, id and payload is performed as per the following rules:

        • The tnf paramter must be a 3-bit value.
        • Records with a tnf of TNF_EMPTY cannot have a type, id or payload.
        • Records with a tnf of TNF_UNKNOWN or 0x07 cannot have a type.
        • Records with a tnf of TNF_UNCHANGED are not allowed since this class only represents complete (unchunked) records.
        This minimal validation is specified by NFCForum-TS-NDEF_1.0 section 3.2.6 (Type Name Format).

        If any of the above validation steps fail then IllegalArgumentException is thrown.

        Deep inspection of the type, id and payload fields is not performed, so it is possible to create NDEF Records that conform to section 3.2.6 but fail other more strict NDEF specification requirements. For example, the payload may be invalid given the tnf and type.

        To omit a type, id or payload field, set the parameter to an empty byte array or null.

        Parameters:
        tnf - a 3-bit TNF constant
        type - byte array, containing zero to 255 bytes, or null
        id - byte array, containing zero to 255 bytes, or null
        payload - byte array, containing zero to (2 ** 32 - 1) bytes, or null
        Throws:
        IllegalArugmentException - if a valid record cannot be created
      • NdefRecord

        @Deprecated
        public NdefRecord(byte[] data)
                   throws FormatException
        Deprecated. use NdefMessage.NdefMessage(byte[]) instead.
        Construct an NDEF Record from raw bytes.

        This method is deprecated, use NdefMessage.NdefMessage(byte[]) instead. This is because it does not make sense to parse a record: the NDEF binary format is only defined for a message, and the record flags MB and ME do not make sense outside of the context of an entire message.

        This implementation will attempt to parse a single record by ignoring the MB and ME flags, and otherwise following the rules of NdefMessage.NdefMessage(byte[]).

        Parameters:
        data - raw bytes to parse
        Throws:
        FormatException - if the data cannot be parsed into a valid record
    • Method Detail

      • createApplicationRecord

        public static NdefRecord createApplicationRecord(String packageName)
        Create a new Android Application Record (AAR).

        This record indicates to other Android devices the package that should be used to handle the entire NDEF message. You can embed this record anywhere into your message to ensure that the intended package receives the message.

        When an Android device dispatches an NdefMessage containing one or more Android application records, the applications contained in those records will be the preferred target for the NfcAdapter.ACTION_NDEF_DISCOVERED intent, in the order in which they appear in the message. This dispatch behavior was first added to Android in Ice Cream Sandwich.

        If none of the applications have a are installed on the device, a Market link will be opened to the first application.

        Note that Android application records do not overrule applications that have called NfcAdapter.enableForegroundDispatch(android.app.Activity, android.app.PendingIntent, android.content.IntentFilter[], java.lang.String[][]).

        Parameters:
        packageName - Android package name
        Returns:
        Android application NDEF record
      • createUri

        public static NdefRecord createUri(Uri uri)
        Create a new NDEF Record containing a URI.

        Use this method to encode a URI (or URL) into an NDEF Record.

        Uses the well known URI type representation: TNF_WELL_KNOWN and RTD_URI. This is the most efficient encoding of a URI into NDEF.

        The uri parameter will be normalized with Uri.normalizeScheme() to set the scheme to lower case to follow Android best practices for intent filtering. However the unchecked exception IllegalArgumentException may be thrown if the uri parameter has serious problems, for example if it is empty, so always catch this exception if you are passing user-generated data into this method.

        Reference specification: NFCForum-TS-RTD_URI_1.0

        Parameters:
        uri - URI to encode.
        Returns:
        an NDEF Record containing the URI
        Throws:
        IllegalArugmentException - if the uri is empty or invalid
      • createUri

        public static NdefRecord createUri(String uriString)
        Create a new NDEF Record containing a URI.

        Use this method to encode a URI (or URL) into an NDEF Record.

        Uses the well known URI type representation: TNF_WELL_KNOWN and RTD_URI. This is the most efficient encoding of a URI into NDEF.

        The uriString parameter will be normalized with Uri.normalizeScheme() to set the scheme to lower case to follow Android best practices for intent filtering. However the unchecked exception IllegalArgumentException may be thrown if the uriString parameter has serious problems, for example if it is empty, so always catch this exception if you are passing user-generated data into this method.

        Reference specification: NFCForum-TS-RTD_URI_1.0

        Parameters:
        uriString - string URI to encode.
        Returns:
        an NDEF Record containing the URI
        Throws:
        IllegalArugmentException - if the uriString is empty or invalid
      • createMime

        public static NdefRecord createMime(String mimeType,
                            byte[] mimeData)
        Create a new NDEF Record containing MIME data.

        Use this method to encode MIME-typed data into an NDEF Record, such as "text/plain", or "image/jpeg".

        The mimeType parameter will be normalized with Intent.normalizeMimeType(java.lang.String) to follow Android best practices for intent filtering, for example to force lower-case. However the unchecked exception IllegalArgumentException may be thrown if the mimeType parameter has serious problems, for example if it is empty, so always catch this exception if you are passing user-generated data into this method.

        For efficiency, This method might not make an internal copy of the mimeData byte array, so take care not to modify the mimeData byte array while still using the returned NdefRecord.

        Parameters:
        mimeType - a valid MIME type
        mimeData - MIME data as bytes
        Returns:
        an NDEF Record containing the MIME-typed data
        Throws:
        IllegalArugmentException - if the mimeType is empty or invalid
      • createExternal

        public static NdefRecord createExternal(String domain,
                                String type,
                                byte[] data)
        Create a new NDEF Record containing external (application-specific) data.

        Use this method to encode application specific data into an NDEF Record. The data is typed by a domain name (usually your Android package name) and a domain-specific type. This data is packaged into a "NFC Forum External Type" NDEF Record.

        NFC Forum requires that the domain and type used in an external record are treated as case insensitive, however Android intent filtering is always case sensitive. So this method will force the domain and type to lower-case before creating the NDEF Record.

        The unchecked exception IllegalArgumentException will be thrown if the domain and type have serious problems, for example if either field is empty, so always catch this exception if you are passing user-generated data into this method.

        There are no such restrictions on the payload data.

        For efficiency, This method might not make an internal copy of the data byte array, so take care not to modify the data byte array while still using the returned NdefRecord. Reference specification: NFCForum-TS-RTD_1.0

        Parameters:
        domain - domain-name of issuing organization
        type - domain-specific type of data
        data - payload as bytes
        Throws:
        IllegalArugmentException - if either domain or type are empty or invalid
      • getTnf

        public short getTnf()
        Returns the 3-bit TNF.

        TNF is the top-level type.

      • getType

        public byte[] getType()
        Returns the variable length Type field.

        This should be used in conjunction with the TNF field to determine the payload format.

        Returns an empty byte array if this record does not have a type field.

      • getId

        public byte[] getId()
        Returns the variable length ID.

        Returns an empty byte array if this record does not have an id field.

      • getPayload

        public byte[] getPayload()
        Returns the variable length payload.

        Returns an empty byte array if this record does not have a payload field.

      • toByteArray

        @Deprecated
        public byte[] toByteArray()
        Deprecated. use NdefMessage.toByteArray() instead
        Return this NDEF Record as a byte array.

        This method is deprecated, use NdefMessage.toByteArray() instead. This is because the NDEF binary format is not defined for a record outside of the context of a message: the MB and ME flags cannot be set without knowing the location inside a message.

        This implementation will attempt to serialize a single record by always setting the MB and ME flags (in other words, assume this is a single-record NDEF Message).

      • toMimeType

        public String toMimeType()
        Map this record to a MIME type, or return null if it cannot be mapped.

        Currently this method considers all TNF_MIME_MEDIA records to be MIME records, as well as some TNF_WELL_KNOWN records such as RTD_TEXT. If this is a MIME record then the MIME type as string is returned, otherwise null is returned.

        This method does not perform validation that the MIME type is actually valid. It always attempts to return a string containing the type if this is a MIME record.

        The returned MIME type will by normalized to lower-case using Intent.normalizeMimeType(java.lang.String).

        The MIME payload can be obtained using getPayload().

        Returns:
        MIME type as a string, or null if this is not a MIME record
      • toUri

        public Uri toUri()
        Map this record to a URI, or return null if it cannot be mapped.

        Currently this method considers the following to be URI records:

        If this is not a URI record by the above rules, then null is returned.

        This method does not perform validation that the URI is actually valid: it always attempts to create and return a URI if this record appears to be a URI record by the above rules.

        The returned URI will be normalized to have a lower case scheme using Uri.normalizeScheme().

        Returns:
        URI, or null if this is not a URI record
      • describeContents

        public int describeContents()
        Description copied from interface: Parcelable
        Describe the kinds of special objects contained in this Parcelable's marshalled representation.
        Specified by:
        describeContents in interface Parcelable
        Returns:
        a bitmask indicating the set of special object types marshalled by the Parcelable.
      • hashCode

        public int hashCode()
        Description copied from class: Object
        Returns an integer hash code for this object. By contract, any two objects for which Object.equals(java.lang.Object) returns true must return the same hash code value. This means that subclasses of Object usually override both methods or neither method.

        Note that hash values must not change over time unless information used in equals comparisons also changes.

        See Writing a correct hashCode method if you intend implementing your own hashCode method.

        Overrides:
        hashCode in class Object
        Returns:
        this object's hash code.
        See Also:
        Object.equals(java.lang.Object)
      • equals

        public boolean equals(Object obj)
        Returns true if the specified NDEF Record contains identical tnf, type, id and payload fields.
        Overrides:
        equals in class Object
        Parameters:
        obj - the object to compare this instance with.
        Returns:
        true if the specified object is equal to this Object; false otherwise.
        See Also:
        Object.hashCode()
      • toString

        public String toString()
        Description copied from class: Object
        Returns a string containing a concise, human-readable description of this object. Subclasses are encouraged to override this method and provide an implementation that takes into account the object's type and data. The default implementation is equivalent to the following expression:
           getClass().getName() + '@' + Integer.toHexString(hashCode())

        See Writing a useful toString method if you intend implementing your own toString method.

        Overrides:
        toString in class Object
        Returns:
        a printable representation of this object.


Content

Android Reference

Java basics

Java Enterprise Edition (EE)

Java Standard Edition (SE)

SQL

HTML

PHP

CSS

Java Script

MYSQL

JQUERY

VBS

REGEX

C

C++

C#

Design patterns

RFC (standard status)

RFC (proposed standard status)

RFC (draft standard status)

RFC (informational status)

RFC (experimental status)

RFC (best current practice status)

RFC (historic status)

RFC (unknown status)

IT dictionary

License.
All information of this service is derived from the free sources and is provided solely in the form of quotations. This service provides information and interfaces solely for the familiarization (not ownership) and under the "as is" condition.
Copyright 2016 © ELTASK.COM. All rights reserved.
Site is optimized for mobile devices.
Downloads: 239 / 158748271. Delta: 0.04193 с