Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 3](https://developer.android.com/sdkExtensions) Summary: [Nested Classes](https://developer.android.com/reference/android/provider/CloudMediaProvider#nestedclasses) \| [Inherited Constants](https://developer.android.com/reference/android/provider/CloudMediaProvider#inhconstants) \| [Ctors](https://developer.android.com/reference/android/provider/CloudMediaProvider#pubctors) \| [Methods](https://developer.android.com/reference/android/provider/CloudMediaProvider#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/android/provider/CloudMediaProvider#inhmethods)

# CloudMediaProvider

*** ** * ** ***

` public abstract class CloudMediaProvider `   
` ` ` extends https://developer.android.com/reference/android/content/ContentProvider ` ` `

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) |||
| ↳ | [android.content.ContentProvider](https://developer.android.com/reference/android/content/ContentProvider) ||
|   | ↳ | android.provider.CloudMediaProvider |

<br />

*** ** * ** ***

Base class for a cloud media provider. A cloud media provider offers read-only access to durable media files, specifically photos and videos stored on a local disk, or files in a cloud storage service. To create a cloud media provider, extend this class, implement the abstract methods, and add it to your manifest like this:

```
<manifest>
    ...
    <application>
        ...
        <provider
            android:name="com.example.MyCloudProvider"
            android:authorities="com.example.mycloudprovider"
            android:exported="true"
            android:permission="com.android.providers.media.permission.MANAGE_CLOUD_MEDIA_PROVIDERS"
            <intent-filter>
                <action android:name="android.content.action.CLOUD_MEDIA_PROVIDER" />
            </intent-filter>
        </provider>
        ...
    </application>
</manifest>
```

When defining your provider, you must protect it with the `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#MANAGE_CLOUD_MEDIA_PROVIDERS_PERMISSION`, which is a permission only the system can obtain, trying to define an unprotected `https://developer.android.com/reference/android/provider/CloudMediaProvider` will result in a `https://developer.android.com/reference/java/lang/SecurityException`.

Applications cannot use a cloud media provider directly; they must go through `https://developer.android.com/reference/android/provider/MediaStore#ACTION_PICK_IMAGES` which requires a user to actively navigate and select media items. When a user selects a media item through that UI, the system issues narrow URI permission grants to the requesting application.

### Media items

A media item must be an openable stream (with a specific MIME type). Media items can belong to zero or more albums. Albums cannot contain other albums.

Each item under a provider is uniquely referenced by its media or album id, which must not change which must be unique across all collection IDs as returned by `https://developer.android.com/reference/android/provider/CloudMediaProvider#onGetMediaCollectionInfo(android.os.Bundle)`.
**See also:**

- `https://developer.android.com/reference/android/provider/MediaStore#ACTION_PICK_IMAGES`

## Summary

| ### Nested classes ||
|---|---|
| ` class` | `https://developer.android.com/reference/android/provider/CloudMediaProvider.CloudMediaSurfaceController` Manages rendering the preview of media items on given instances of `https://developer.android.com/reference/android/view/Surface`. |
| ` class` | `https://developer.android.com/reference/android/provider/CloudMediaProvider.CloudMediaSurfaceStateChangedCallback` This class is used by `https://developer.android.com/reference/android/provider/CloudMediaProvider` to send `https://developer.android.com/reference/android/view/Surface` state updates to picker launched via `https://developer.android.com/reference/android/provider/MediaStore#ACTION_PICK_IMAGES`. |

### Inherited constants

From interface `https://developer.android.com/reference/android/content/ComponentCallbacks2` `int` `https://developer.android.com/reference/android/content/ComponentCallbacks2#TRIM_MEMORY_BACKGROUND`

Level for `https://developer.android.com/reference/android/content/ComponentCallbacks2#onTrimMemory(int)`: the process has gone on to the LRU list.
`int` `https://developer.android.com/reference/android/content/ComponentCallbacks2#TRIM_MEMORY_COMPLETE`

*This constant was deprecated in API level 35. Apps are not notified of this level since API level 34*
`int` `https://developer.android.com/reference/android/content/ComponentCallbacks2#TRIM_MEMORY_MODERATE`

*This constant was deprecated in API level 35. Apps are not notified of this level since API level 34*
`int` `https://developer.android.com/reference/android/content/ComponentCallbacks2#TRIM_MEMORY_RUNNING_CRITICAL`

*This constant was deprecated in API level 35. Apps are not notified of this level since API level 34*
`int` `https://developer.android.com/reference/android/content/ComponentCallbacks2#TRIM_MEMORY_RUNNING_LOW`

*This constant was deprecated in API level 35. Apps are not notified of this level since API level 34*
`int` `https://developer.android.com/reference/android/content/ComponentCallbacks2#TRIM_MEMORY_RUNNING_MODERATE`

*This constant was deprecated in API level 35. Apps are not notified of this level since API level 34*
`int` `https://developer.android.com/reference/android/content/ComponentCallbacks2#TRIM_MEMORY_UI_HIDDEN`

Level for `https://developer.android.com/reference/android/content/ComponentCallbacks2#onTrimMemory(int)`: the process had been showing a user interface, and is no longer doing so.

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/android/provider/CloudMediaProvider#CloudMediaProvider()() ` |

| ### Public methods ||
|---|---|
| ` final void` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#attachInfo(android.content.Context,%20android.content.pm.ProviderInfo)(https://developer.android.com/reference/android/content/Context context, https://developer.android.com/reference/android/content/pm/ProviderInfo info) ` Implementation is provided by the parent class. |
| ` final https://developer.android.com/reference/android/os/Bundle` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#call(java.lang.String,%20java.lang.String,%20android.os.Bundle)(https://developer.android.com/reference/java/lang/String method, https://developer.android.com/reference/java/lang/String arg, https://developer.android.com/reference/android/os/Bundle extras) ` Implementation is provided by the parent class. |
| ` final https://developer.android.com/reference/android/net/Uri` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#canonicalize(android.net.Uri)(https://developer.android.com/reference/android/net/Uri uri) ` Implementation is provided by the parent class. |
| ` final int` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#delete(android.net.Uri,%20java.lang.String,%20java.lang.String[])(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String selection, https://developer.android.com/reference/java/lang/String selectionArgs) ` Implementation is provided by the parent class. |
| ` final https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#getType(android.net.Uri)(https://developer.android.com/reference/android/net/Uri uri) ` Implementation is provided by the parent class. |
| ` final https://developer.android.com/reference/android/net/Uri` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#insert(android.net.Uri,%20android.content.ContentValues)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/android/content/ContentValues values) ` Implementation is provided by the parent class. |
| ` https://developer.android.com/reference/android/provider/CloudMediaProvider.CloudMediaSurfaceController` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#onCreateCloudMediaSurfaceController(android.os.Bundle,%20android.provider.CloudMediaProvider.CloudMediaSurfaceStateChangedCallback)(https://developer.android.com/reference/android/os/Bundle config, https://developer.android.com/reference/android/provider/CloudMediaProvider.CloudMediaSurfaceStateChangedCallback callback) ` Returns a `https://developer.android.com/reference/android/provider/CloudMediaProvider.CloudMediaSurfaceController` used for rendering the preview of media items, or null if preview rendering is not supported. |
| ` https://developer.android.com/reference/android/provider/CloudMediaProviderContract.Capabilities` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#onGetCapabilities()() ` Returns the `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.Capabilities` of this CloudMediaProvider. |
| ` abstract https://developer.android.com/reference/android/os/Bundle` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#onGetMediaCollectionInfo(android.os.Bundle)(https://developer.android.com/reference/android/os/Bundle extras) ` Returns metadata about the media collection itself. |
| ` abstract https://developer.android.com/reference/android/os/ParcelFileDescriptor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#onOpenMedia(java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)(https://developer.android.com/reference/java/lang/String mediaId, https://developer.android.com/reference/android/os/Bundle extras, https://developer.android.com/reference/android/os/CancellationSignal signal) ` Returns the full size media item identified by `mediaId`. |
| ` abstract https://developer.android.com/reference/android/content/res/AssetFileDescriptor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#onOpenPreview(java.lang.String,%20android.graphics.Point,%20android.os.Bundle,%20android.os.CancellationSignal)(https://developer.android.com/reference/java/lang/String mediaId, https://developer.android.com/reference/android/graphics/Point size, https://developer.android.com/reference/android/os/Bundle extras, https://developer.android.com/reference/android/os/CancellationSignal signal) ` Returns a thumbnail of `size` for a media item identified by `mediaId` The cloud media provider should strictly return thumbnail in the original `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaColumns#MIME_TYPE` of the item. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#onQueryAlbums(android.os.Bundle)(https://developer.android.com/reference/android/os/Bundle extras) ` Returns a cursor representing all album items in the media collection optionally filtered by `extras` and sorted in reverse chronological order of `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.AlbumColumns#DATE_TAKEN_MILLIS`, i.e. |
| ` abstract https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#onQueryDeletedMedia(android.os.Bundle)(https://developer.android.com/reference/android/os/Bundle extras) ` Returns a `https://developer.android.com/reference/android/database/Cursor` representing all deleted media items in the entire media collection within the current provider version as returned by `https://developer.android.com/reference/android/provider/CloudMediaProvider#onGetMediaCollectionInfo(android.os.Bundle)`. |
| ` abstract https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#onQueryMedia(android.os.Bundle)(https://developer.android.com/reference/android/os/Bundle extras) ` Returns a cursor representing all media items in the media collection optionally filtered by `extras` and sorted in reverse chronological order of `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaColumns#DATE_TAKEN_MILLIS`, i.e. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#onQueryMediaCategories(java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)(https://developer.android.com/reference/java/lang/String parentCategoryId, https://developer.android.com/reference/android/os/Bundle extras, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) ` Queries for the available MediaCategories under the given `parentCategoryId`, filtered by `extras`. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#onQueryMediaInMediaSet(java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)(https://developer.android.com/reference/java/lang/String mediaSetId, https://developer.android.com/reference/android/os/Bundle extras, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) ` Queries for the available media items under a given `mediaSetId`, filtered by `extras`. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#onQueryMediaSets(java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)(https://developer.android.com/reference/java/lang/String mediaCategoryId, https://developer.android.com/reference/android/os/Bundle extras, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) ` Queries for the available MediaSets under a given `mediaCategoryId`, filtered by `extras`. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#onQuerySearchSuggestions(java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)(https://developer.android.com/reference/java/lang/String prefixText, https://developer.android.com/reference/android/os/Bundle extras, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) ` Queries for the available SearchSuggestions based on a `prefixText`, filtered by `extras`. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#onSearchMedia(java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)(https://developer.android.com/reference/java/lang/String searchText, https://developer.android.com/reference/android/os/Bundle extras, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) ` Searches media items based on entered search text, managed by `extras` and returns a cursor of `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaColumns` based on the match. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#onSearchMedia(java.lang.String,%20java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)(https://developer.android.com/reference/java/lang/String suggestedMediaSetId, https://developer.android.com/reference/java/lang/String fallbackSearchText, https://developer.android.com/reference/android/os/Bundle extras, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) ` Searches media items based on a selected suggestion, managed by `extras` and returns a cursor of `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaColumns` based on the match. |
| ` final https://developer.android.com/reference/android/os/ParcelFileDescriptor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#openFile(android.net.Uri,%20java.lang.String,%20android.os.CancellationSignal)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String mode, https://developer.android.com/reference/android/os/CancellationSignal signal) ` Implementation is provided by the parent class. |
| ` final https://developer.android.com/reference/android/os/ParcelFileDescriptor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#openFile(android.net.Uri,%20java.lang.String)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String mode) ` Implementation is provided by the parent class. |
| ` final https://developer.android.com/reference/android/content/res/AssetFileDescriptor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#openTypedAssetFile(android.net.Uri,%20java.lang.String,%20android.os.Bundle)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String mimeTypeFilter, https://developer.android.com/reference/android/os/Bundle opts) ` Implementation is provided by the parent class. |
| ` final https://developer.android.com/reference/android/content/res/AssetFileDescriptor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#openTypedAssetFile(android.net.Uri,%20java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String mimeTypeFilter, https://developer.android.com/reference/android/os/Bundle opts, https://developer.android.com/reference/android/os/CancellationSignal signal) ` Implementation is provided by the parent class. |
| ` final https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#query(android.net.Uri,%20java.lang.String[],%20android.os.Bundle,%20android.os.CancellationSignal)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String projection, https://developer.android.com/reference/android/os/Bundle queryArgs, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) ` Implementation is provided by the parent class. |
| ` final https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#query(android.net.Uri,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lang.String,%20android.os.CancellationSignal)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String projection, https://developer.android.com/reference/java/lang/String selection, https://developer.android.com/reference/java/lang/String selectionArgs, https://developer.android.com/reference/java/lang/String sortOrder, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) ` Implementation is provided by the parent class. |
| ` final https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#query(android.net.Uri,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lang.String)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String projection, https://developer.android.com/reference/java/lang/String selection, https://developer.android.com/reference/java/lang/String selectionArgs, https://developer.android.com/reference/java/lang/String sortOrder) ` Implementation is provided by the parent class. |
| ` final int` | ` https://developer.android.com/reference/android/provider/CloudMediaProvider#update(android.net.Uri,%20android.content.ContentValues,%20java.lang.String,%20java.lang.String[])(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/android/content/ContentValues values, https://developer.android.com/reference/java/lang/String selection, https://developer.android.com/reference/java/lang/String selectionArgs) ` Implementation is provided by the parent class. |

### Inherited methods

From class ` https://developer.android.com/reference/android/content/ContentProvider ` ` https://developer.android.com/reference/android/content/ContentProviderResult` ` https://developer.android.com/reference/android/content/ContentProvider#applyBatch(java.lang.String,%20java.util.ArrayList<android.content.ContentProviderOperation>)(https://developer.android.com/reference/java/lang/String authority, https://developer.android.com/reference/java/util/ArrayList<https://developer.android.com/reference/android/content/ContentProviderOperation> operations) `

Override this to handle requests to perform a batch of operations, or the default implementation will iterate over the operations and call `https://developer.android.com/reference/android/content/ContentProviderOperation#apply(android.content.ContentProvider,%20android.content.ContentProviderResult[],%20int)` on each of them.
` https://developer.android.com/reference/android/content/ContentProviderResult` ` https://developer.android.com/reference/android/content/ContentProvider#applyBatch(java.util.ArrayList<android.content.ContentProviderOperation>)(https://developer.android.com/reference/java/util/ArrayList<https://developer.android.com/reference/android/content/ContentProviderOperation> operations) ` ` void` ` https://developer.android.com/reference/android/content/ContentProvider#attachInfo(android.content.Context,%20android.content.pm.ProviderInfo)(https://developer.android.com/reference/android/content/Context context, https://developer.android.com/reference/android/content/pm/ProviderInfo info) `

After being instantiated, this is called to tell the content provider about itself.
` int` ` https://developer.android.com/reference/android/content/ContentProvider#bulkInsert(android.net.Uri,%20android.content.ContentValues[])(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/android/content/ContentValues values) `

Override this to handle requests to insert a set of new rows, or the default implementation will iterate over the values and call `https://developer.android.com/reference/android/content/ContentProvider#insert(android.net.Uri,%20android.content.ContentValues)` on each of them.
` https://developer.android.com/reference/android/os/Bundle` ` https://developer.android.com/reference/android/content/ContentProvider#call(java.lang.String,%20java.lang.String,%20java.lang.String,%20android.os.Bundle)(https://developer.android.com/reference/java/lang/String authority, https://developer.android.com/reference/java/lang/String method, https://developer.android.com/reference/java/lang/String arg, https://developer.android.com/reference/android/os/Bundle extras) `

Call a provider-defined method.
` https://developer.android.com/reference/android/os/Bundle` ` https://developer.android.com/reference/android/content/ContentProvider#call(java.lang.String,%20java.lang.String,%20android.os.Bundle)(https://developer.android.com/reference/java/lang/String method, https://developer.android.com/reference/java/lang/String arg, https://developer.android.com/reference/android/os/Bundle extras) ` ` https://developer.android.com/reference/android/net/Uri` ` https://developer.android.com/reference/android/content/ContentProvider#canonicalize(android.net.Uri)(https://developer.android.com/reference/android/net/Uri url) `

Implement this to support canonicalization of URIs that refer to your content provider.
` final https://developer.android.com/reference/android/content/ContentProvider.CallingIdentity` ` https://developer.android.com/reference/android/content/ContentProvider#clearCallingIdentity()() `

Reset the identity of the incoming IPC on the current thread.
` abstract int` ` https://developer.android.com/reference/android/content/ContentProvider#delete(android.net.Uri,%20java.lang.String,%20java.lang.String[])(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String selection, https://developer.android.com/reference/java/lang/String selectionArgs) `

Implement this to handle requests to delete one or more rows.
` int` ` https://developer.android.com/reference/android/content/ContentProvider#delete(android.net.Uri,%20android.os.Bundle)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/android/os/Bundle extras) `

Implement this to handle requests to delete one or more rows.
` void` ` https://developer.android.com/reference/android/content/ContentProvider#dump(java.io.FileDescriptor,%20java.io.PrintWriter,%20java.lang.String[])(https://developer.android.com/reference/java/io/FileDescriptor fd, https://developer.android.com/reference/java/io/PrintWriter writer, https://developer.android.com/reference/java/lang/String args) `

Print the Provider's state into the given stream.
` final https://developer.android.com/reference/android/content/AttributionSource` ` https://developer.android.com/reference/android/content/ContentProvider#getCallingAttributionSource()() `

Gets the attribution source of the calling app.
` final https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/android/content/ContentProvider#getCallingAttributionTag()() `

Return the attribution tag of the caller that initiated the request being processed on the current thread.
` final https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/android/content/ContentProvider#getCallingPackage()() `

Return the package name of the caller that initiated the request being processed on the current thread.
` final https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/android/content/ContentProvider#getCallingPackageUnchecked()() `

Return the package name of the caller that initiated the request being processed on the current thread.
` final https://developer.android.com/reference/android/content/Context` ` https://developer.android.com/reference/android/content/ContentProvider#getContext()() `

Retrieves the Context this provider is running in.
` final https://developer.android.com/reference/android/content/pm/PathPermission` ` https://developer.android.com/reference/android/content/ContentProvider#getPathPermissions()() `

Return the path-based permissions required for read and/or write access to this content provider.
` final https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/android/content/ContentProvider#getReadPermission()() `

Return the name of the permission required for read-only access to this content provider.
` https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/android/content/ContentProvider#getStreamTypes(android.net.Uri,%20java.lang.String)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String mimeTypeFilter) `

Called by a client to determine the types of data streams that this content provider supports for the given URI.
` abstract https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/android/content/ContentProvider#getType(android.net.Uri)(https://developer.android.com/reference/android/net/Uri uri) `

Implement this to handle requests for the MIME type of the data at the given URI.
` https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/android/content/ContentProvider#getTypeAnonymous(android.net.Uri)(https://developer.android.com/reference/android/net/Uri uri) `

Implement this to handle requests for MIME type of URIs, that does not need to reveal any internal information which should be protected by any permission.
` final https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/android/content/ContentProvider#getWritePermission()() `

Return the name of the permission required for read/write access to this content provider.
` https://developer.android.com/reference/android/net/Uri` ` https://developer.android.com/reference/android/content/ContentProvider#insert(android.net.Uri,%20android.content.ContentValues,%20android.os.Bundle)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/android/content/ContentValues values, https://developer.android.com/reference/android/os/Bundle extras) `

Implement this to handle requests to insert a new row.
` abstract https://developer.android.com/reference/android/net/Uri` ` https://developer.android.com/reference/android/content/ContentProvider#insert(android.net.Uri,%20android.content.ContentValues)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/android/content/ContentValues values) `

Implement this to handle requests to insert a new row.
` boolean` ` https://developer.android.com/reference/android/content/ContentProvider#isTemporary()() `

Returns true if this instance is a temporary content provider.
` void` ` https://developer.android.com/reference/android/content/ContentProvider#onCallingPackageChanged()() `

Called whenever the value of `https://developer.android.com/reference/android/content/ContentProvider#getCallingPackage()` changes, giving the provider an opportunity to invalidate any security related caching it may be performing.
` void` ` https://developer.android.com/reference/android/content/ContentProvider#onConfigurationChanged(android.content.res.Configuration)(https://developer.android.com/reference/android/content/res/Configuration newConfig) `

Called by the system when the device configuration changes while your component is running. This method is always called on the application main thread, and must not perform lengthy operations.
` abstract boolean` ` https://developer.android.com/reference/android/content/ContentProvider#onCreate()() `

Implement this to initialize your content provider on startup.
` void` ` https://developer.android.com/reference/android/content/ContentProvider#onLowMemory()() `

This is called when the overall system is running low on memory, and actively running processes should trim their memory usage. This method is always called on the application main thread, and must not perform lengthy operations.
` void` ` https://developer.android.com/reference/android/content/ContentProvider#onTrimMemory(int)(int level) `

Called when the operating system has determined that it is a good time for a process to trim unneeded memory from its process.
` https://developer.android.com/reference/android/content/res/AssetFileDescriptor` ` https://developer.android.com/reference/android/content/ContentProvider#openAssetFile(android.net.Uri,%20java.lang.String,%20android.os.CancellationSignal)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String mode, https://developer.android.com/reference/android/os/CancellationSignal signal) `

This is like `https://developer.android.com/reference/android/content/ContentProvider#openFile(android.net.Uri,%20java.lang.String)`, but can be implemented by providers that need to be able to return sub-sections of files, often assets inside of their .apk.
` https://developer.android.com/reference/android/content/res/AssetFileDescriptor` ` https://developer.android.com/reference/android/content/ContentProvider#openAssetFile(android.net.Uri,%20java.lang.String)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String mode) `

This is like `https://developer.android.com/reference/android/content/ContentProvider#openFile(android.net.Uri,%20java.lang.String)`, but can be implemented by providers that need to be able to return sub-sections of files, often assets inside of their .apk.
` https://developer.android.com/reference/android/os/ParcelFileDescriptor` ` https://developer.android.com/reference/android/content/ContentProvider#openFile(android.net.Uri,%20java.lang.String,%20android.os.CancellationSignal)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String mode, https://developer.android.com/reference/android/os/CancellationSignal signal) `

Override this to handle requests to open a file blob.
` https://developer.android.com/reference/android/os/ParcelFileDescriptor` ` https://developer.android.com/reference/android/content/ContentProvider#openFile(android.net.Uri,%20java.lang.String)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String mode) `

Override this to handle requests to open a file blob.
` final https://developer.android.com/reference/android/os/ParcelFileDescriptor` ` https://developer.android.com/reference/android/content/ContentProvider#openFileHelper(android.net.Uri,%20java.lang.String)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String mode) `

Convenience for subclasses that wish to implement `https://developer.android.com/reference/android/content/ContentProvider#openFile(android.net.Uri,%20java.lang.String)` by looking up a column named "_data" at the given URI.
` <T> https://developer.android.com/reference/android/os/ParcelFileDescriptor` ` https://developer.android.com/reference/android/content/ContentProvider#openPipeHelper(android.net.Uri,%20java.lang.String,%20android.os.Bundle,%20T,%20android.content.ContentProvider.PipeDataWriter<T>)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String mimeType, https://developer.android.com/reference/android/os/Bundle opts, T args, https://developer.android.com/reference/android/content/ContentProvider.PipeDataWriter<T> func) `

A helper function for implementing `https://developer.android.com/reference/android/content/ContentProvider#openTypedAssetFile(android.net.Uri,%20java.lang.String,%20android.os.Bundle)`, for creating a data pipe and background thread allowing you to stream generated data back to the client.
` https://developer.android.com/reference/android/content/res/AssetFileDescriptor` ` https://developer.android.com/reference/android/content/ContentProvider#openTypedAssetFile(android.net.Uri,%20java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String mimeTypeFilter, https://developer.android.com/reference/android/os/Bundle opts, https://developer.android.com/reference/android/os/CancellationSignal signal) `

Called by a client to open a read-only stream containing data of a particular MIME type.
` https://developer.android.com/reference/android/content/res/AssetFileDescriptor` ` https://developer.android.com/reference/android/content/ContentProvider#openTypedAssetFile(android.net.Uri,%20java.lang.String,%20android.os.Bundle)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String mimeTypeFilter, https://developer.android.com/reference/android/os/Bundle opts) `

Called by a client to open a read-only stream containing data of a particular MIME type.
` https://developer.android.com/reference/android/database/Cursor` ` https://developer.android.com/reference/android/content/ContentProvider#query(android.net.Uri,%20java.lang.String[],%20android.os.Bundle,%20android.os.CancellationSignal)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String projection, https://developer.android.com/reference/android/os/Bundle queryArgs, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) `

Implement this to handle query requests where the arguments are packed into a `https://developer.android.com/reference/android/os/Bundle`.
` https://developer.android.com/reference/android/database/Cursor` ` https://developer.android.com/reference/android/content/ContentProvider#query(android.net.Uri,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lang.String,%20android.os.CancellationSignal)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String projection, https://developer.android.com/reference/java/lang/String selection, https://developer.android.com/reference/java/lang/String selectionArgs, https://developer.android.com/reference/java/lang/String sortOrder, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) `

Implement this to handle query requests from clients with support for cancellation.
` abstract https://developer.android.com/reference/android/database/Cursor` ` https://developer.android.com/reference/android/content/ContentProvider#query(android.net.Uri,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lang.String)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/java/lang/String projection, https://developer.android.com/reference/java/lang/String selection, https://developer.android.com/reference/java/lang/String selectionArgs, https://developer.android.com/reference/java/lang/String sortOrder) `

Implement this to handle query requests from clients.
` boolean` ` https://developer.android.com/reference/android/content/ContentProvider#refresh(android.net.Uri,%20android.os.Bundle,%20android.os.CancellationSignal)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/android/os/Bundle extras, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) `

Implement this to support refresh of content identified by `uri`.
` final https://developer.android.com/reference/android/content/Context` ` https://developer.android.com/reference/android/content/ContentProvider#requireContext()() `

Retrieves a Non-Nullable Context this provider is running in, this is intended to be called after `https://developer.android.com/reference/android/content/ContentProvider#onCreate()`.
` final void` ` https://developer.android.com/reference/android/content/ContentProvider#restoreCallingIdentity(android.content.ContentProvider.CallingIdentity)(https://developer.android.com/reference/android/content/ContentProvider.CallingIdentity identity) `

Restore the identity of the incoming IPC on the current thread back to a previously identity that was returned by `https://developer.android.com/reference/android/content/ContentProvider#clearCallingIdentity()`.
` final void` ` https://developer.android.com/reference/android/content/ContentProvider#setPathPermissions(android.content.pm.PathPermission[])(https://developer.android.com/reference/android/content/pm/PathPermission permissions) `

Change the path-based permission required to read and/or write data in the content provider.
` final void` ` https://developer.android.com/reference/android/content/ContentProvider#setReadPermission(java.lang.String)(https://developer.android.com/reference/java/lang/String permission) `

Change the permission required to read data from the content provider.
` final void` ` https://developer.android.com/reference/android/content/ContentProvider#setWritePermission(java.lang.String)(https://developer.android.com/reference/java/lang/String permission) `

Change the permission required to read and write data in the content provider.
` void` ` https://developer.android.com/reference/android/content/ContentProvider#shutdown()() `

Implement this to shut down the ContentProvider instance.
` https://developer.android.com/reference/android/net/Uri` ` https://developer.android.com/reference/android/content/ContentProvider#uncanonicalize(android.net.Uri)(https://developer.android.com/reference/android/net/Uri url) `

Remove canonicalization from canonical URIs previously returned by `https://developer.android.com/reference/android/content/ContentProvider#canonicalize(android.net.Uri)`.
` int` ` https://developer.android.com/reference/android/content/ContentProvider#update(android.net.Uri,%20android.content.ContentValues,%20android.os.Bundle)(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/android/content/ContentValues values, https://developer.android.com/reference/android/os/Bundle extras) `

Implement this to handle requests to update one or more rows.
` abstract int` ` https://developer.android.com/reference/android/content/ContentProvider#update(android.net.Uri,%20android.content.ContentValues,%20java.lang.String,%20java.lang.String[])(https://developer.android.com/reference/android/net/Uri uri, https://developer.android.com/reference/android/content/ContentValues values, https://developer.android.com/reference/java/lang/String selection, https://developer.android.com/reference/java/lang/String selectionArgs) `

Implement this to handle requests to update one or more rows.
From class ` https://developer.android.com/reference/java/lang/Object ` ` https://developer.android.com/reference/java/lang/Object` ` https://developer.android.com/reference/java/lang/Object#clone()() `

Creates and returns a copy of this object.
` boolean` ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) `

Indicates whether some other object is "equal to" this one.
` void` ` https://developer.android.com/reference/java/lang/Object#finalize()() `

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
` final https://developer.android.com/reference/java/lang/Class<?>` ` https://developer.android.com/reference/java/lang/Object#getClass()() `

Returns the runtime class of this `Object`.
` int` ` https://developer.android.com/reference/java/lang/Object#hashCode()() `

Returns a hash code value for the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#notify()() `

Wakes up a single thread that is waiting on this object's monitor.
` final void` ` https://developer.android.com/reference/java/lang/Object#notifyAll()() `

Wakes up all threads that are waiting on this object's monitor.
` https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/java/lang/Object#toString()() `

Returns a string representation of the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait()() `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*.
From interface ` https://developer.android.com/reference/android/content/ComponentCallbacks2 ` ` abstract void` ` https://developer.android.com/reference/android/content/ComponentCallbacks2#onTrimMemory(int)(int level) `

Called when the operating system has determined that it is a good time for a process to trim unneeded memory from its process.
From interface ` https://developer.android.com/reference/android/content/ComponentCallbacks ` ` abstract void` ` https://developer.android.com/reference/android/content/ComponentCallbacks#onConfigurationChanged(android.content.res.Configuration)(https://developer.android.com/reference/android/content/res/Configuration newConfig) `

Called by the system when the device configuration changes while your component is running.
` abstract void` ` https://developer.android.com/reference/android/content/ComponentCallbacks#onLowMemory()() `

*This method was deprecated in API level 35. Since API level 14 this is superseded by `https://developer.android.com/reference/android/content/ComponentCallbacks2#onTrimMemory(int)`. Since API level 34 this is never called. If you're overriding ComponentCallbacks2#onTrimMemory and your minSdkVersion is greater than API 14, you can provide an empty implementation for this method.*

## Public constructors

### CloudMediaProvider

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 3](https://developer.android.com/sdkExtensions)

```
public CloudMediaProvider ()
```

<br />

<br />

## Public methods

### attachInfo

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void attachInfo (Context context, 
                ProviderInfo info)
```

Implementation is provided by the parent class. Cannot be overridden.

<br />

| Parameters ||
|---|---|
| `context` | `Context`: This value cannot be `null`. <br /> |
| `info` | `ProviderInfo`: This value cannot be `null`. <br /> |

### call

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final Bundle call (String method, 
                String arg, 
                Bundle extras)
```

Implementation is provided by the parent class. Cannot be overridden.

<br />

| Parameters ||
|---|---|
| `method` | `String`: This value cannot be `null`. <br /> |
| `arg` | `String`: This value may be `null`. <br /> |
| `extras` | `Bundle`: This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/os/Bundle` | This value cannot be `null`. <br /> |

### canonicalize

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final Uri canonicalize (Uri uri)
```

Implementation is provided by the parent class. Throws by default, and cannot be overridden.

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/net/Uri` | This value cannot be `null`. <br /> |

### delete

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final int delete (Uri uri, 
                String selection, 
                String[] selectionArgs)
```

Implementation is provided by the parent class. Throws by default, and cannot be overridden.

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: This value cannot be `null`. <br /> |
| `selection` | `String`: This value may be `null`. <br /> |
| `selectionArgs` | `String`: This value may be `null`. <br /> |

| Returns ||
|---|---|
| `int` | The number of rows affected. <br /> |

### getType

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final String getType (Uri uri)
```

Implementation is provided by the parent class. Throws by default, and cannot be overridden.

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | This value cannot be `null`. <br /> |

### insert

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final Uri insert (Uri uri, 
                ContentValues values)
```

Implementation is provided by the parent class. Throws by default, and cannot be overridden.

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: This value cannot be `null`. <br /> |
| `values` | `ContentValues`: This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/net/Uri` | This value cannot be `null`. <br /> |

### onCreateCloudMediaSurfaceController

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 3](https://developer.android.com/sdkExtensions)

```
public CloudMediaProvider.CloudMediaSurfaceController onCreateCloudMediaSurfaceController (Bundle config, 
                CloudMediaProvider.CloudMediaSurfaceStateChangedCallback callback)
```

Returns a `https://developer.android.com/reference/android/provider/CloudMediaProvider.CloudMediaSurfaceController` used for rendering the preview of media items, or null if preview rendering is not supported.

<br />

| Parameters ||
|---|---|
| `config` | `Bundle`: containing configuration parameters for `https://developer.android.com/reference/android/provider/CloudMediaProvider.CloudMediaSurfaceController` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_LOOPING_PLAYBACK_ENABLED` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_SURFACE_CONTROLLER_AUDIO_MUTE_ENABLED` . This value cannot be `null`. <br /> |
| `callback` | `CloudMediaProvider.CloudMediaSurfaceStateChangedCallback`: `https://developer.android.com/reference/android/provider/CloudMediaProvider.CloudMediaSurfaceStateChangedCallback` to send state updates for `https://developer.android.com/reference/android/view/Surface` to picker launched via `https://developer.android.com/reference/android/provider/MediaStore#ACTION_PICK_IMAGES` This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/provider/CloudMediaProvider.CloudMediaSurfaceController` | <br /> |

### onGetCapabilities

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 16](https://developer.android.com/sdkExtensions)

```
public CloudMediaProviderContract.Capabilities onGetCapabilities ()
```

Returns the `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.Capabilities` of this CloudMediaProvider. This object is used to determine which APIs can be safely invoked during runtime. If not overridden the default capabilities are used. IMPORTANT: This method is performance critical and should avoid long running or expensive operations.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.Capabilities` | This value cannot be `null`. <br /> |

**See also:**

- `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.Capabilities`

### onGetMediaCollectionInfo

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 3](https://developer.android.com/sdkExtensions)

```
public abstract Bundle onGetMediaCollectionInfo (Bundle extras)
```

Returns metadata about the media collection itself.

This is useful for the OS to determine if its cache of media items in the collection is still valid and if a full or incremental sync is required with `https://developer.android.com/reference/android/provider/CloudMediaProvider#onQueryMedia(android.os.Bundle)`.

This method might be called by the OS frequently and is performance critical, hence it should avoid long running operations.

If the provider handled any filters in `extras`, it must add the key to the `https://developer.android.com/reference/android/content/ContentResolver#EXTRA_HONORED_ARGS` as part of the returned `https://developer.android.com/reference/android/os/Bundle`. Consistent failures to return valid media collection info may result in changing the active cloud media provider serving the photopicker.

<br />

| Parameters ||
|---|---|
| `extras` | `Bundle`: containing keys to filter result: - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_ALBUM_ID` . This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/os/Bundle` | `https://developer.android.com/reference/android/os/Bundle` containing `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaCollectionInfo` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaCollectionInfo#MEDIA_COLLECTION_ID` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaCollectionInfo#LAST_MEDIA_SYNC_GENERATION` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaCollectionInfo#ACCOUNT_NAME` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaCollectionInfo#ACCOUNT_CONFIGURATION_INTENT` . This value cannot be `null`. <br /> |

### onOpenMedia

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 3](https://developer.android.com/sdkExtensions)

```
public abstract ParcelFileDescriptor onOpenMedia (String mediaId, 
                Bundle extras, 
                CancellationSignal signal)
```

Returns the full size media item identified by `mediaId`.

If you block while downloading content, you should periodically check `https://developer.android.com/reference/android/os/CancellationSignal#isCanceled()` to abort abandoned open requests.

<br />

| Parameters ||
|---|---|
| `mediaId` | `String`: the media item to return. This value cannot be `null`. <br /> |
| `extras` | `Bundle`: to modify the way the fd is opened, there's none at the moment, but some might be implemented in the future. This value may be `null`. <br /> |
| `signal` | `CancellationSignal`: used by the OS to signal if the request should be cancelled. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/os/ParcelFileDescriptor` | read-only file descriptor for accessing the media file. This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/FileNotFoundException` |   |

**See also:**

- `https://developer.android.com/reference/android/provider/CloudMediaProvider#onOpenPreview(java.lang.String,%20android.graphics.Point,%20android.os.Bundle,%20android.os.CancellationSignal)`

### onOpenPreview

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 3](https://developer.android.com/sdkExtensions)

```
public abstract AssetFileDescriptor onOpenPreview (String mediaId, 
                Point size, 
                Bundle extras, 
                CancellationSignal signal)
```

Returns a thumbnail of `size` for a media item identified by `mediaId`

The cloud media provider should strictly return thumbnail in the original `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaColumns#MIME_TYPE` of the item.

This is expected to be a much lower resolution version than the item returned by `https://developer.android.com/reference/android/provider/CloudMediaProvider#onOpenMedia(java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)`.

If you block while downloading content, you should periodically check `https://developer.android.com/reference/android/os/CancellationSignal#isCanceled()` to abort abandoned open requests.

<br />

| Parameters ||
|---|---|
| `mediaId` | `String`: the media item to return. This value cannot be `null`. <br /> |
| `size` | `Point`: the dimensions of the thumbnail to return. The returned file descriptor doesn't have to match the `size` precisely because the OS will adjust the dimensions before usage. Implementations can return close approximations especially if the approximation is already locally on the device and doesn't require downloading from the cloud. This value cannot be `null`. <br /> |
| `extras` | `Bundle`: to modify the way the fd is opened, e.g. for video files we may request a thumbnail image instead of a video with `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PREVIEW_THUMBNAIL`. In the absence of this extra, this method must return a descriptor representing the actual media file, otherwise it should return the thumbnail. Failure in returning the same may cause unexpected media preview behaviour in the photopicker. This value may be `null`. <br /> |
| `signal` | `CancellationSignal`: used by the OS to signal if the request should be cancelled. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/content/res/AssetFileDescriptor` | read-only file descriptor for accessing the thumbnail for the media file. This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/FileNotFoundException` |   |

**See also:**

- `https://developer.android.com/reference/android/provider/CloudMediaProvider#onOpenMedia(java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)`
- `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PREVIEW_THUMBNAIL`

### onQueryAlbums

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 3](https://developer.android.com/sdkExtensions)

```
public Cursor onQueryAlbums (Bundle extras)
```

Returns a cursor representing all album items in the media collection optionally filtered by `extras` and sorted in reverse chronological order of `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.AlbumColumns#DATE_TAKEN_MILLIS`, i.e. most recent items first.

The cloud media provider must set the `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_MEDIA_COLLECTION_ID` as part of the returned `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)` `https://developer.android.com/reference/android/os/Bundle`. Not setting this is an error and invalidates the returned `https://developer.android.com/reference/android/database/Cursor`.

If the provider handled any filters in `extras`, it must add the key to the `https://developer.android.com/reference/android/content/ContentResolver#EXTRA_HONORED_ARGS` as part of the returned `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)` `https://developer.android.com/reference/android/os/Bundle`.

<br />

| Parameters ||
|---|---|
| `extras` | `Bundle`: containing keys to filter album items: - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_SYNC_GENERATION` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_TOKEN` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_SIZE` - `https://developer.android.com/reference/android/content/Intent#EXTRA_MIME_TYPES` . This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | cursor representing album items containing all `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.AlbumColumns` columns. This value cannot be `null`. <br /> |

### onQueryDeletedMedia

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 3](https://developer.android.com/sdkExtensions)

```
public abstract Cursor onQueryDeletedMedia (Bundle extras)
```

Returns a `https://developer.android.com/reference/android/database/Cursor` representing all deleted media items in the entire media collection within the current provider version as returned by `https://developer.android.com/reference/android/provider/CloudMediaProvider#onGetMediaCollectionInfo(android.os.Bundle)`. These items can be optionally filtered by `extras`.

The cloud media provider must set the `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_MEDIA_COLLECTION_ID` as part of the returned `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)` `https://developer.android.com/reference/android/os/Bundle`. Not setting this is an error and invalidates the returned `https://developer.android.com/reference/android/database/Cursor`.

If the provider handled any filters in `extras`, it must add the key to the `https://developer.android.com/reference/android/content/ContentResolver#EXTRA_HONORED_ARGS` as part of the returned `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)` `https://developer.android.com/reference/android/os/Bundle`.

<br />

| Parameters ||
|---|---|
| `extras` | `Bundle`: containing keys to filter deleted media items: - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_SYNC_GENERATION` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_TOKEN` . This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | cursor representing deleted media items containing just the `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaColumns#ID` column. This value cannot be `null`. <br /> |

### onQueryMedia

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 3](https://developer.android.com/sdkExtensions)

```
public abstract Cursor onQueryMedia (Bundle extras)
```

Returns a cursor representing all media items in the media collection optionally filtered by `extras` and sorted in reverse chronological order of `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaColumns#DATE_TAKEN_MILLIS`, i.e. most recent items first.

The cloud media provider must set the `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_MEDIA_COLLECTION_ID` as part of the returned `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)` `https://developer.android.com/reference/android/os/Bundle`. Not setting this is an error and invalidates the returned `https://developer.android.com/reference/android/database/Cursor`.

If the cloud media provider handled any filters in `extras`, it must add the key to the `https://developer.android.com/reference/android/content/ContentResolver#EXTRA_HONORED_ARGS` as part of the returned `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)` `https://developer.android.com/reference/android/os/Bundle`.

<br />

| Parameters ||
|---|---|
| `extras` | `Bundle`: containing keys to filter media items: - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_SYNC_GENERATION` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_TOKEN` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_ALBUM_ID` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_SIZE` . This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | cursor representing media items containing all `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaColumns` columns. This value cannot be `null`. <br /> |

### onQueryMediaCategories

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 16](https://developer.android.com/sdkExtensions)

```
public Cursor onQueryMediaCategories (String parentCategoryId, 
                Bundle extras, 
                CancellationSignal cancellationSignal)
```

Queries for the available MediaCategories under the given `parentCategoryId`, filtered by `extras`. The columns of MediaCategories are in the class `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaCategoryColumns`.

When `parentCategoryId` is null, this returns the root categories.

The order in which media categories are sorted in the cursor will be retained when displaying results to the user.

The cloud media provider must set the `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_MEDIA_COLLECTION_ID` as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)`. Not setting this is an error and invalidates the returned `https://developer.android.com/reference/android/database/Cursor`, meaning photo picker will not use the cursor for any operation.

`extras` may contain some key-value pairs which should be used to filter the results. If the provider handled any filters in `extras`, it must add the key to the `https://developer.android.com/reference/android/content/ContentResolver#EXTRA_HONORED_ARGS` as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)`. If not honored, photo picker will assume the result of the query is without the extra being used. Note: Currently this function does not pass any params in `extras`.

<br />

| Parameters ||
|---|---|
| `parentCategoryId` | `String`: the ID of the parent category to filter media categories. This value may be `null`. <br /> |
| `extras` | `Bundle`: containing keys to filter media categories: - `https://developer.android.com/reference/android/content/Intent#EXTRA_MIME_TYPES` . This value cannot be `null`. <br /> |
| `cancellationSignal` | `CancellationSignal`: `https://developer.android.com/reference/android/os/CancellationSignal` to check if request has been cancelled. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | cursor with `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaCategoryColumns` columns <br /> |

### onQueryMediaInMediaSet

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 16](https://developer.android.com/sdkExtensions)

```
public Cursor onQueryMediaInMediaSet (String mediaSetId, 
                Bundle extras, 
                CancellationSignal cancellationSignal)
```

Queries for the available media items under a given `mediaSetId`, filtered by `extras`. The columns of Media are in the class `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaColumns`. `mediaSetId` is the ID given as part of `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaSetColumns#ID`

The order in which media items are sorted in the cursor will be retained when displaying results to the user.

The cloud media provider must set the `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_MEDIA_COLLECTION_ID` as part of the returned `https://developer.android.com/reference/android/database/Cursor` by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)`. Not setting this is an error and invalidates the returned `https://developer.android.com/reference/android/database/Cursor`, meaning photo picker will not use the cursor for any operation.

`extras` may contain some key-value pairs which should be used to prepare the results. If the provider handled any filters in `extras`, it must add the key to the `https://developer.android.com/reference/android/content/ContentResolver#EXTRA_HONORED_ARGS` as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)`. If not honored, photo picker will assume the result of the query is without the extra being used.

If the cloud media provider supports pagination, they can set `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_TOKEN` as the next page token, as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)`. If a token is set, the OS will pass it as a key-value pair in `extras` when querying for media for subsequent pages. The provider can keep returning pagination tokens in the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)` until the last page at which point it should not set a token in the returned cursor.

<br />

| Parameters ||
|---|---|
| `mediaSetId` | `String`: the ID of the media set to filter media items. This value cannot be `null`. <br /> |
| `extras` | `Bundle`: containing keys to filter media items: - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_TOKEN` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_SIZE` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_SORT_ORDER` - `https://developer.android.com/reference/android/content/Intent#EXTRA_MIME_TYPES` . This value cannot be `null`. <br /> |
| `cancellationSignal` | `CancellationSignal`: `https://developer.android.com/reference/android/os/CancellationSignal` to check if request has been cancelled. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | cursor representing `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaColumns` columns. This value cannot be `null`. <br /> |

### onQueryMediaSets

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 16](https://developer.android.com/sdkExtensions)

```
public Cursor onQueryMediaSets (String mediaCategoryId, 
                Bundle extras, 
                CancellationSignal cancellationSignal)
```

Queries for the available MediaSets under a given `mediaCategoryId`, filtered by `extras`. The columns of MediaSet are in the class `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaSetColumns`.

This returns MediaSets directly inside the given MediaCategoryId. If the passed mediaCategoryId has some more nested mediaCategories, the mediaSets inside the nested mediaCategories must not be returned in this response.

The order in which media sets are sorted in the cursor will be retained when displaying results to the user.

The cloud media provider must set the `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_MEDIA_COLLECTION_ID` as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)` . Not setting this is an error and invalidates the returned `https://developer.android.com/reference/android/database/Cursor`, meaning photo picker will not use the cursor for any operation.

`extras` may contain some key-value pairs which should be used to prepare the results. If the provider handled any filters in `extras`, it must add the key to the `https://developer.android.com/reference/android/content/ContentResolver#EXTRA_HONORED_ARGS` as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)`. If not honored, photo picker will assume the result of the query is without the extra being used.

If the cloud media provider supports pagination, they can set `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_TOKEN` as the next page token, as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)`. If a token is set, the OS will pass it as a key-value pair in `extras` when querying for query media sets for subsequent pages. The provider can keep returning pagination tokens in the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)` until the last page at which point it should not set a token in the returned cursor.

<br />

| Parameters ||
|---|---|
| `mediaCategoryId` | `String`: the ID of the media category to filter media sets. This value cannot be `null`. <br /> |
| `extras` | `Bundle`: containing keys to filter media sets: - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_TOKEN` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_SIZE` - `https://developer.android.com/reference/android/content/Intent#EXTRA_MIME_TYPES` . This value cannot be `null`. <br /> |
| `cancellationSignal` | `CancellationSignal`: `https://developer.android.com/reference/android/os/CancellationSignal` to check if request has been cancelled. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | cursor representing `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaSetColumns` columns. This value cannot be `null`. <br /> |

### onQuerySearchSuggestions

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 16](https://developer.android.com/sdkExtensions)

```
public Cursor onQuerySearchSuggestions (String prefixText, 
                Bundle extras, 
                CancellationSignal cancellationSignal)
```

Queries for the available SearchSuggestions based on a `prefixText`, filtered by `extras`. The columns of SearchSuggestions are in the class `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.SearchSuggestionColumns`

If the user has not started typing, this is considered as zero state suggestion. In this case `prefixText` will be empty string.

The order in which suggestions are sorted in the cursor will be retained when displaying results to the user.

The cloud media provider must set the `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_MEDIA_COLLECTION_ID` as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)` . Not setting this is an error and invalidates the returned `https://developer.android.com/reference/android/database/Cursor`, meaning photo picker will not use the cursor for any operation.

`extras` may contain some key-value pairs which should be used to prepare the results. If the provider handled any params in `extras`, it must add the key to the `https://developer.android.com/reference/android/content/ContentResolver#EXTRA_HONORED_ARGS` as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)`. If not honored, photo picker will assume the result of the query is without the extra being used. Note: Currently this function does not pass any key-value params in `extras`.

Results may not be displayed if it takes longer than 300 milliseconds to get a response from the cloud media provider.

<br />

| Parameters ||
|---|---|
| `prefixText` | `String`: the prefix text to filter search suggestions. This value cannot be `null`. <br /> |
| `extras` | `Bundle`: containing keys to filter search suggestions. - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_SIZE` . This value cannot be `null`. <br /> |
| `cancellationSignal` | `CancellationSignal`: `https://developer.android.com/reference/android/os/CancellationSignal` to check if request has been cancelled. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | cursor representing search suggestions containing all `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.SearchSuggestionColumns` columns. This value cannot be `null`. <br /> |

### onSearchMedia

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 16](https://developer.android.com/sdkExtensions)

```
public Cursor onSearchMedia (String searchText, 
                Bundle extras, 
                CancellationSignal cancellationSignal)
```

Searches media items based on entered search text, managed by `extras` and returns a cursor of `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaColumns` based on the match.

The cloud media provider must set the `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_MEDIA_COLLECTION_ID` as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)` . Not setting this is an error and invalidates the returned `https://developer.android.com/reference/android/database/Cursor`, meaning photo picker will not use the cursor for any operation.

`extras` may contain some key-value pairs which should be used to prepare the results. If the provider handled any params in `extras`, it must add the key to the `https://developer.android.com/reference/android/content/ContentResolver#EXTRA_HONORED_ARGS` as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)`. If not honored, photo picker will assume the result of the query is without the extra being used.

An example user journey:

1. User enters the search prompt.
2. Using `https://developer.android.com/reference/android/provider/CloudMediaProvider#onQuerySearchSuggestions(java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)`, photo picker display suggestions as the user keeps typing.
3. User types completely and then enters search, Photo picker calls: `onSearchMedia(searchText, extras)`

If the cloud media provider supports pagination, they can set `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_TOKEN` as the next page token, as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)`. If a token is set, the OS will pass it as a key value pair in `extras` when querying for search media for subsequent pages. The provider can keep returning pagination tokens in the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)` until the last page at which point it should not set a token in the returned cursor.

Results may not be displayed if it takes longer than 3 seconds to get a paged response from the cloud media provider.

<br />

| Parameters ||
|---|---|
| `searchText` | `String`: search text to be used. This value cannot be `null`. <br /> |
| `extras` | `Bundle`: containing keys to manage the search results: - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_TOKEN` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_SIZE` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_SORT_ORDER` - `https://developer.android.com/reference/android/content/Intent#EXTRA_MIME_TYPES` . This value cannot be `null`. <br /> |
| `cancellationSignal` | `CancellationSignal`: `https://developer.android.com/reference/android/os/CancellationSignal` to check if request has been cancelled. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | cursor of `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaColumns` based on the match. This value cannot be `null`. <br /> |

### onSearchMedia

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [R Extensions 16](https://developer.android.com/sdkExtensions)

```
public Cursor onSearchMedia (String suggestedMediaSetId, 
                String fallbackSearchText, 
                Bundle extras, 
                CancellationSignal cancellationSignal)
```

Searches media items based on a selected suggestion, managed by `extras` and returns a cursor of `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaColumns` based on the match.

The cloud media provider must set the `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_MEDIA_COLLECTION_ID` as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)` . Not setting this is an error and invalidates the returned `https://developer.android.com/reference/android/database/Cursor`, meaning photo picker will not use the cursor for any operation.

`extras` may contain some key-value pairs which should be used to prepare the results. If the provider handled any params in `extras`, it must add the key to the `https://developer.android.com/reference/android/content/ContentResolver#EXTRA_HONORED_ARGS` as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)`. If not honored, photo picker will assume the result of the query is without the extra being used.

An example user journey:

1. User enters the search prompt.
2. Using `https://developer.android.com/reference/android/provider/CloudMediaProvider#onQuerySearchSuggestions(java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)`, photo picker display suggestions as the user keeps typing.
3. User selects a suggestion, Photo picker calls: `onSearchMedia(suggestedMediaSetId, fallbackSearchText, extras)` with the `suggestedMediaSetId` corresponding to the user chosen suggestion. `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.SearchSuggestionColumns#MEDIA_SET_ID`

If the cloud media provider supports pagination, they can set `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_TOKEN` as the next page token, as part of the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)`. If a token is set, the OS will pass it as a key value pair in `extras` when querying for search media for subsequent pages. The provider can keep returning pagination tokens in the returned cursor by using `https://developer.android.com/reference/android/database/Cursor#setExtras(android.os.Bundle)` until the last page at which point it should not set a token in the returned cursor

Results may not be displayed if it takes longer than 3 seconds to get a paged response from the cloud media provider.

<br />

| Parameters ||
|---|---|
| `suggestedMediaSetId` | `String`: the media set ID of the suggestion that the user wants to search. This value cannot be `null`. <br /> |
| `fallbackSearchText` | `String`: optional search text to be used when `suggestedMediaSetId` is not useful. This value may be `null`. <br /> |
| `extras` | `Bundle`: containing keys to manage the search results: - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_TOKEN` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_PAGE_SIZE` - `https://developer.android.com/reference/android/provider/CloudMediaProviderContract#EXTRA_SORT_ORDER` - `https://developer.android.com/reference/android/content/Intent#EXTRA_MIME_TYPES` . This value cannot be `null`. <br /> |
| `cancellationSignal` | `CancellationSignal`: `https://developer.android.com/reference/android/os/CancellationSignal` to check if request has been cancelled. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | cursor of `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.MediaColumns` based on the match. This value cannot be `null`. <br /> |

**See also:**

- `https://developer.android.com/reference/android/provider/CloudMediaProviderContract.SearchSuggestionColumns#MEDIA_SET_ID`

### openFile

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final ParcelFileDescriptor openFile (Uri uri, 
                String mode, 
                CancellationSignal signal)
```

Implementation is provided by the parent class. Cannot be overridden.

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: This value cannot be `null`. <br /> |
| `mode` | `String`: This value cannot be `null`. <br /> |
| `signal` | `CancellationSignal`: This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/os/ParcelFileDescriptor` | This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/FileNotFoundException` |   |

**See also:**

- `https://developer.android.com/reference/android/provider/CloudMediaProvider#onOpenMedia(java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)`

### openFile

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final ParcelFileDescriptor openFile (Uri uri, 
                String mode)
```

Implementation is provided by the parent class. Cannot be overridden.

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: This value cannot be `null`. <br /> |
| `mode` | `String`: This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/os/ParcelFileDescriptor` | This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/FileNotFoundException` |   |

**See also:**

- `https://developer.android.com/reference/android/provider/CloudMediaProvider#onOpenMedia(java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)`

### openTypedAssetFile

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final AssetFileDescriptor openTypedAssetFile (Uri uri, 
                String mimeTypeFilter, 
                Bundle opts)
```

Implementation is provided by the parent class. Cannot be overridden.

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: This value cannot be `null`. <br /> |
| `mimeTypeFilter` | `String`: This value cannot be `null`. <br /> |
| `opts` | `Bundle`: This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/content/res/AssetFileDescriptor` | This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/FileNotFoundException` |   |

**See also:**

- `https://developer.android.com/reference/android/provider/CloudMediaProvider#onOpenPreview(java.lang.String,%20android.graphics.Point,%20android.os.Bundle,%20android.os.CancellationSignal)`
- `https://developer.android.com/reference/android/provider/CloudMediaProvider#onOpenMedia(java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)`

### openTypedAssetFile

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final AssetFileDescriptor openTypedAssetFile (Uri uri, 
                String mimeTypeFilter, 
                Bundle opts, 
                CancellationSignal signal)
```

Implementation is provided by the parent class. Cannot be overridden.

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: This value cannot be `null`. <br /> |
| `mimeTypeFilter` | `String`: This value cannot be `null`. <br /> |
| `opts` | `Bundle`: This value may be `null`. <br /> |
| `signal` | `CancellationSignal`: This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/content/res/AssetFileDescriptor` | This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/FileNotFoundException` |   |

**See also:**

- `https://developer.android.com/reference/android/provider/CloudMediaProvider#onOpenPreview(java.lang.String,%20android.graphics.Point,%20android.os.Bundle,%20android.os.CancellationSignal)`
- `https://developer.android.com/reference/android/provider/CloudMediaProvider#onOpenMedia(java.lang.String,%20android.os.Bundle,%20android.os.CancellationSignal)`

### query

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final Cursor query (Uri uri, 
                String[] projection, 
                Bundle queryArgs, 
                CancellationSignal cancellationSignal)
```

Implementation is provided by the parent class. Cannot be overridden.

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: This value cannot be `null`. <br /> |
| `projection` | `String`: This value may be `null`. <br /> |
| `queryArgs` | `Bundle`: This value may be `null`. <br /> |
| `cancellationSignal` | `CancellationSignal`: This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | This value cannot be `null`. <br /> |

**See also:**

- `https://developer.android.com/reference/android/provider/CloudMediaProvider#onQueryMedia(android.os.Bundle)`
- `https://developer.android.com/reference/android/provider/CloudMediaProvider#onQueryDeletedMedia(android.os.Bundle)`
- `https://developer.android.com/reference/android/provider/CloudMediaProvider#onQueryAlbums(android.os.Bundle)`

### query

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final Cursor query (Uri uri, 
                String[] projection, 
                String selection, 
                String[] selectionArgs, 
                String sortOrder, 
                CancellationSignal cancellationSignal)
```

Implementation is provided by the parent class. Throws by default, and cannot be overridden.

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: This value cannot be `null`. <br /> |
| `projection` | `String`: This value may be `null`. <br /> |
| `selection` | `String`: This value may be `null`. <br /> |
| `selectionArgs` | `String`: This value may be `null`. <br /> |
| `sortOrder` | `String`: This value may be `null`. <br /> |
| `cancellationSignal` | `CancellationSignal`: This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | This value cannot be `null`. <br /> |

### query

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final Cursor query (Uri uri, 
                String[] projection, 
                String selection, 
                String[] selectionArgs, 
                String sortOrder)
```

Implementation is provided by the parent class. Throws by default, and cannot be overridden.

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: This value cannot be `null`. <br /> |
| `projection` | `String`: This value may be `null`. <br /> |
| `selection` | `String`: This value may be `null`. <br /> |
| `selectionArgs` | `String`: This value may be `null`. <br /> |
| `sortOrder` | `String`: This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | This value cannot be `null`. <br /> |

### update

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final int update (Uri uri, 
                ContentValues values, 
                String selection, 
                String[] selectionArgs)
```

Implementation is provided by the parent class. Throws by default, and cannot be overridden.

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: This value cannot be `null`. <br /> |
| `values` | `ContentValues`: This value cannot be `null`. <br /> |
| `selection` | `String`: This value may be `null`. <br /> |
| `selectionArgs` | `String`: This value may be `null`. <br /> |

| Returns ||
|---|---|
| `int` | the number of rows affected. <br /> |