MediaColumns
interface MediaColumns : BaseColumns
android.provider.MediaStore.MediaColumns |
Common media metadata columns.
Summary
Constants | |
---|---|
static String |
Indexed value of |
static String |
Indexed value of |
static String |
Indexed value of |
static String |
Indexed value of |
static String |
Indexed value of |
static String |
The primary bucket display name of this media item. |
static String |
The primary bucket ID of this media item. |
static String |
Indexed value of |
static String |
Indexed value of |
static String |
Indexed value of |
static String |
Indexed value of |
static String |
Absolute filesystem path to the media item on disk. |
static String |
The time the media item was first added. |
static String |
The time the media item should be considered expired. |
static String |
Indexed value of |
static String |
Indexed value of |
static String |
Indexed value of |
static String |
The display name of the media item. |
static String |
The "document ID" GUID as defined by the XMP Media Management standard, extracted from any XMP metadata contained within this media item. |
static String |
Indexed value of |
static String |
Generation number at which metadata for this media item was first inserted. |
static String |
Generation number at which metadata for this media item was last changed. |
static String |
Indexed value of |
static String |
Indexed value of |
static String |
The "instance ID" GUID as defined by the XMP Media Management standard, extracted from any XMP metadata contained within this media item. |
static String |
Flag indicating if the media item has been marked as being part of the |
static String |
Flag indicating if a media item is DRM protected. |
static String |
Flag indicating if the media item has been marked as being a "favorite" by the user. |
static String |
Flag indicating if a media item is pending, and still being inserted by its owner. |
static String |
Flag indicating if a media item is trashed. |
static String |
The MIME type of the media item. |
static String |
Indexed value of |
static String |
Indexed value of |
static String |
The "original document ID" GUID as defined by the XMP Media Management standard, extracted from any XMP metadata contained within this media item. |
static String |
Package name that contributed this media. |
static String |
Relative path of this media item within the storage device where it is persisted. |
static String |
Calculated value that combines |
static String |
Indexed value of |
static String |
Indexed value of |
static String |
Volume name of the specific storage device where this media item is persisted. |
static String |
Indexed value of |
static String |
Indexed value of |
static String |
Indexed XMP metadata extracted from this media item. |
static String |
Indexed value of |
Inherited constants | |
---|---|
Constants
ALBUM
static val ALBUM: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_ALBUM
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "album"
ALBUM_ARTIST
static val ALBUM_ARTIST: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_ALBUMARTIST
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "album_artist"
ARTIST
static val ARTIST: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_ARTIST
or ExifInterface#TAG_ARTIST
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "artist"
AUTHOR
static val AUTHOR: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_AUTHOR
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "author"
BITRATE
static val BITRATE: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_BITRATE
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "bitrate"
BUCKET_DISPLAY_NAME
static val BUCKET_DISPLAY_NAME: String
The primary bucket display name of this media item. This can be useful to present the user a first-level clustering of related media items. This is a read-only column that is automatically computed.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "bucket_display_name"
BUCKET_ID
static val BUCKET_ID: String
The primary bucket ID of this media item. This can be useful to present the user a first-level clustering of related media items. This is a read-only column that is automatically computed.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "bucket_id"
CAPTURE_FRAMERATE
static val CAPTURE_FRAMERATE: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_CAPTURE_FRAMERATE
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_FLOAT
, and are read-only and cannot be mutated.
Value: "capture_framerate"
CD_TRACK_NUMBER
static val CD_TRACK_NUMBER: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_CD_TRACK_NUMBER
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "cd_track_number"
COMPILATION
static val COMPILATION: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_COMPILATION
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "compilation"
COMPOSER
static val COMPOSER: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_COMPOSER
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "composer"
DATA
static val DATA: String
Absolute filesystem path to the media item on disk.
Apps may use this path to do file operations. However, they should not assume that the file is always available. Apps must be prepared to handle any file-based I/O errors that could occur.
From Android 11 onwards, this column is read-only for apps that target R
and higher. On those devices, when creating or updating a uri, this column's value is not accepted. Instead, to update the filesystem location of a file, use the values of the DISPLAY_NAME
and RELATIVE_PATH
columns.
Though direct file operations are supported, ContentResolver#openFileDescriptor(Uri, String)
API is recommended for better performance.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
.
Value: "_data"
DATE_ADDED
static val DATE_ADDED: String
The time the media item was first added.
Value is a non-negative timestamp measured as the number of seconds since 1970-01-01T00:00:00Z.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "date_added"
DATE_EXPIRES
static val DATE_EXPIRES: String
The time the media item should be considered expired. Typically only meaningful in the context of IS_PENDING
or IS_TRASHED
.
The value stored in this column is automatically calculated when IS_PENDING
or IS_TRASHED
is changed. The default pending expiration is typically 7 days, and the default trashed expiration is typically 30 days.
Expired media items are automatically deleted once their expiration time has passed, typically during the next device idle period.
Value is a non-negative timestamp measured as the number of seconds since 1970-01-01T00:00:00Z.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "date_expires"
DATE_MODIFIED
static val DATE_MODIFIED: String
Indexed value of File#lastModified()
extracted from this media item.
Value is a non-negative timestamp measured as the number of seconds since 1970-01-01T00:00:00Z.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "date_modified"
DATE_TAKEN
static val DATE_TAKEN: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_DATE
or ExifInterface#TAG_DATETIME_ORIGINAL
extracted from this media item.
Note that images must define both ExifInterface#TAG_DATETIME_ORIGINAL
and ExifInterface#TAG_OFFSET_TIME_ORIGINAL
to reliably determine this value in relation to the epoch.
Value is a non-negative timestamp measured as the number of milliseconds since 1970-01-01T00:00:00Z.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "datetaken"
DISC_NUMBER
static val DISC_NUMBER: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_DISC_NUMBER
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "disc_number"
DISPLAY_NAME
static val DISPLAY_NAME: String
The display name of the media item.
For example, an item stored at /storage/0000-0000/DCIM/Vacation/IMG1024.JPG
would have a display name of IMG1024.JPG
.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
.
Value: "_display_name"
DOCUMENT_ID
static val DOCUMENT_ID: String
The "document ID" GUID as defined by the XMP Media Management standard, extracted from any XMP metadata contained within this media item. The value is null
when no metadata was found.
Each "document ID" is created once for each new resource. Different renditions of that resource are expected to have different IDs.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "document_id"
DURATION
static val DURATION: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_DURATION
extracted from this media item.
Value is a non-negative duration in milliseconds.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "duration"
GENERATION_ADDED
static val GENERATION_ADDED: String
Generation number at which metadata for this media item was first inserted. This is useful for apps that are attempting to quickly identify exactly which media items have been added since a previous point in time. Generation numbers are monotonically increasing over time, and can be safely arithmetically compared.
Detecting media additions using generation numbers is more robust than using DATE_ADDED
, since those values may change in unexpected ways when apps use File#setLastModified(long)
or when the system clock is set incorrectly.
Note that before comparing these detailed generation values, you should first confirm that the overall version hasn't changed by checking MediaStore#getVersion(Context, String)
, since that indicates when a more radical change has occurred. If the overall version changes, you should assume that generation numbers have been reset and perform a full synchronization pass.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "generation_added"
GENERATION_MODIFIED
static val GENERATION_MODIFIED: String
Generation number at which metadata for this media item was last changed. This is useful for apps that are attempting to quickly identify exactly which media items have changed since a previous point in time. Generation numbers are monotonically increasing over time, and can be safely arithmetically compared.
Detecting media changes using generation numbers is more robust than using DATE_MODIFIED
, since those values may change in unexpected ways when apps use File#setLastModified(long)
or when the system clock is set incorrectly.
Note that before comparing these detailed generation values, you should first confirm that the overall version hasn't changed by checking MediaStore#getVersion(Context, String)
, since that indicates when a more radical change has occurred. If the overall version changes, you should assume that generation numbers have been reset and perform a full synchronization pass.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "generation_modified"
GENRE
static val GENRE: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_GENRE
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "genre"
HEIGHT
static val HEIGHT: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_VIDEO_HEIGHT
, MediaMetadataRetriever#METADATA_KEY_IMAGE_HEIGHT
or ExifInterface#TAG_IMAGE_LENGTH
extracted from this media item.
Type: INTEGER
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "height"
INSTANCE_ID
static val INSTANCE_ID: String
The "instance ID" GUID as defined by the XMP Media Management standard, extracted from any XMP metadata contained within this media item. The value is null
when no metadata was found.
This "instance ID" changes with each save operation of a specific "document ID".
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "instance_id"
IS_DOWNLOAD
static val IS_DOWNLOAD: String
Flag indicating if the media item has been marked as being part of the Downloads
collection.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "is_download"
IS_DRM
static val IS_DRM: String
Flag indicating if a media item is DRM protected.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
.
Value: "is_drm"
IS_FAVORITE
static val IS_FAVORITE: String
Flag indicating if the media item has been marked as being a "favorite" by the user.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
.
Value: "is_favorite"
IS_PENDING
static val IS_PENDING: String
Flag indicating if a media item is pending, and still being inserted by its owner. While this flag is set, only the owner of the item can open the underlying file; requests from other apps will be rejected.
Pending items are retained either until they are published by setting the field to 0
, or until they expire as defined by DATE_EXPIRES
.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
.
Value: "is_pending"
IS_TRASHED
static val IS_TRASHED: String
Flag indicating if a media item is trashed.
Trashed items are retained until they expire as defined by DATE_EXPIRES
.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
.
Value: "is_trashed"
MIME_TYPE
static val MIME_TYPE: String
The MIME type of the media item.
This is typically defined based on the file extension of the media item. However, it may be the value of the format
attribute defined by the Dublin Core Media Initiative standard, extracted from any XMP metadata contained within this media item.
Note: the format
attribute may be ignored if the top-level MIME type disagrees with the file extension. For example, it's reasonable for an image/jpeg
file to declare a format
of image/vnd.google.panorama360+jpg
, but declaring a format
of audio/ogg
would be ignored.
This is a read-only column that is automatically computed.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
.
Value: "mime_type"
NUM_TRACKS
static val NUM_TRACKS: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_NUM_TRACKS
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "num_tracks"
ORIENTATION
static val ORIENTATION: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_VIDEO_ROTATION
, MediaMetadataRetriever#METADATA_KEY_IMAGE_ROTATION
, or ExifInterface#TAG_ORIENTATION
extracted from this media item.
For consistency the indexed value is expressed in degrees, such as 0, 90, 180, or 270.
Type: INTEGER
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "orientation"
ORIGINAL_DOCUMENT_ID
static val ORIGINAL_DOCUMENT_ID: String
The "original document ID" GUID as defined by the XMP Media Management standard, extracted from any XMP metadata contained within this media item.
This "original document ID" links a resource to its original source. For example, when you save a PSD document as a JPEG, then convert the JPEG to GIF format, the "original document ID" of both the JPEG and GIF files is the "document ID" of the original PSD file.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "original_document_id"
OWNER_PACKAGE_NAME
static val OWNER_PACKAGE_NAME: String
Package name that contributed this media. The value may be NULL
if ownership cannot be reliably determined.
From Android Build.VERSION_CODES#UPSIDE_DOWN_CAKE
onwards, visibility and query of this field will depend on package visibility. For android.content.ContentResolver#query operation, result set will be restricted to visible packages only.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "owner_package_name"
RELATIVE_PATH
static val RELATIVE_PATH: String
Relative path of this media item within the storage device where it is persisted. For example, an item stored at /storage/0000-0000/DCIM/Vacation/IMG1024.JPG
would have a path of DCIM/Vacation/
.
This value should only be used for organizational purposes, and you should not attempt to construct or access a raw filesystem path using this value. If you need to open a media item, use an API like ContentResolver#openFileDescriptor(Uri, String)
.
When this value is set to NULL
during an android.content.ContentResolver#insert operation, the newly created item will be placed in a relevant default location based on the type of media being inserted. For example, a image/jpeg
item will be placed under Environment#DIRECTORY_PICTURES
.
You can modify this column during an android.content.ContentResolver#update call, which will move the underlying file on disk.
In both cases above, content must be placed under a top-level directory that is relevant to the media type. For example, attempting to place a audio/mpeg
file under Environment#DIRECTORY_PICTURES
will be rejected.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
.
Value: "relative_path"
RESOLUTION
static val RESOLUTION: String
Calculated value that combines WIDTH
and HEIGHT
into a user-presentable string.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "resolution"
SIZE
static val SIZE: String
Indexed value of File#length()
extracted from this media item.
Value is a non-negative number of bytes.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "_size"
TITLE
static val TITLE: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_TITLE
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "title"
VOLUME_NAME
static val VOLUME_NAME: String
Volume name of the specific storage device where this media item is persisted. The value is typically one of the volume names returned from MediaStore#getExternalVolumeNames(Context)
.
This is a read-only column that is automatically computed.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "volume_name"
WIDTH
static val WIDTH: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_VIDEO_WIDTH
, MediaMetadataRetriever#METADATA_KEY_IMAGE_WIDTH
or ExifInterface#TAG_IMAGE_WIDTH
extracted from this media item.
Type: INTEGER
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "width"
WRITER
static val WRITER: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_WRITER
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_STRING
, and are read-only and cannot be mutated.
Value: "writer"
XMP
static val XMP: String
Indexed XMP metadata extracted from this media item.
The structure of this metadata is defined by the XMP Media Management standard, published as ISO 16684-1:2012.
This metadata is typically extracted from a ExifInterface#TAG_XMP
contained inside an image file or from a XMP_
box contained inside an ISO/IEC base media file format (MPEG-4 Part 12).
Note that any location details are redacted from this metadata for privacy reasons.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_BLOB
, and are read-only and cannot be mutated.
Value: "xmp"
YEAR
static val YEAR: String
Indexed value of MediaMetadataRetriever#METADATA_KEY_YEAR
extracted from this media item.
This constant represents a column name that can be used with a android.content.ContentProvider
through a android.content.ContentValues
or android.database.Cursor
object. The values stored in this column are Cursor#FIELD_TYPE_INTEGER
, and are read-only and cannot be mutated.
Value: "year"