CloudMediaProvider

abstract class CloudMediaProvider : ContentProvider
kotlin.Any
   ↳ android.content.ContentProvider
   ↳ android.provider.CloudMediaProvider

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 CloudMediaProviderContract#MANAGE_CLOUD_MEDIA_PROVIDERS_PERMISSION, which is a permission only the system can obtain, trying to define an unprotected CloudMediaProvider will result in a SecurityException.

Applications cannot use a cloud media provider directly; they must go through 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 onGetMediaCollectionInfo.

Summary

Nested classes
abstract

Manages rendering the preview of media items on given instances of Surface.

This class is used by CloudMediaProvider to send Surface state updates to picker launched via MediaStore#ACTION_PICK_IMAGES.

Inherited constants
Public constructors

Public methods
Unit
attachInfo(context: Context, info: ProviderInfo)

Implementation is provided by the parent class.

Bundle
call(method: String, arg: String?, extras: Bundle?)

Implementation is provided by the parent class.

Uri

Implementation is provided by the parent class.

Int
delete(uri: Uri, selection: String?, selectionArgs: Array<String!>?)

Implementation is provided by the parent class.

String
getType(uri: Uri)

Implementation is provided by the parent class.

Uri
insert(uri: Uri, values: ContentValues!)

Implementation is provided by the parent class.

open CloudMediaProvider.CloudMediaSurfaceController?

Returns a CloudMediaSurfaceController used for rendering the preview of media items, or null if preview rendering is not supported.

abstract Bundle

Returns metadata about the media collection itself.

abstract ParcelFileDescriptor
onOpenMedia(mediaId: String, extras: Bundle?, signal: CancellationSignal?)

Returns the full size media item identified by mediaId.

abstract AssetFileDescriptor
onOpenPreview(mediaId: String, size: Point, extras: Bundle?, signal: CancellationSignal?)

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

open Cursor

Returns a cursor representing all album items in the media collection optionally filtered by extras and sorted in reverse chronological order of CloudMediaProviderContract.AlbumColumns#DATE_TAKEN_MILLIS, i.

abstract Cursor

Returns a Cursor representing all deleted media items in the entire media collection within the current provider version as returned by onGetMediaCollectionInfo.

abstract Cursor

Returns a cursor representing all media items in the media collection optionally filtered by extras and sorted in reverse chronological order of CloudMediaProviderContract.MediaColumns#DATE_TAKEN_MILLIS, i.

ParcelFileDescriptor
openFile(uri: Uri, mode: String)

Implementation is provided by the parent class.

ParcelFileDescriptor
openFile(uri: Uri, mode: String, signal: CancellationSignal?)

Implementation is provided by the parent class.

AssetFileDescriptor
openTypedAssetFile(uri: Uri, mimeTypeFilter: String, opts: Bundle?)

Implementation is provided by the parent class.

AssetFileDescriptor
openTypedAssetFile(uri: Uri, mimeTypeFilter: String, opts: Bundle?, signal: CancellationSignal?)

Implementation is provided by the parent class.

Cursor
query(uri: Uri, projection: Array<String!>?, queryArgs: Bundle?, cancellationSignal: CancellationSignal?)

Implementation is provided by the parent class.

Cursor
query(uri: Uri, projection: Array<String!>?, selection: String?, selectionArgs: Array<String!>?, sortOrder: String?)

Implementation is provided by the parent class.

Cursor
query(uri: Uri, projection: Array<String!>?, selection: String?, selectionArgs: Array<String!>?, sortOrder: String?, cancellationSignal: CancellationSignal?)

Implementation is provided by the parent class.

Int
update(uri: Uri, values: ContentValues!, selection: String?, selectionArgs: Array<String!>?)

Implementation is provided by the parent class.

Inherited functions

Public constructors

CloudMediaProvider

CloudMediaProvider()

Public methods

attachInfo

Added in API level 33
fun attachInfo(
    context: Context,
    info: ProviderInfo
): Unit

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

Parameters
context Context: This value cannot be null.
info ProviderInfo: This value cannot be null.

call

Added in API level 33
fun call(
    method: String,
    arg: String?,
    extras: Bundle?
): Bundle

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

Parameters
method String: This value cannot be null.
arg String?: This value may be null.
extras Bundle?: This value may be null.
Return
Bundle This value cannot be null.

canonicalize

Added in API level 33
fun canonicalize(uri: Uri): Uri

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

Parameters
url The Uri to canonicalize. This value cannot be null.
uri Uri: This value cannot be null.
Return
Uri This value cannot be null.

delete

Added in API level 33
fun delete(
    uri: Uri,
    selection: String?,
    selectionArgs: Array<String!>?
): Int

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

Parameters
uri Uri: This value cannot be null.
selection String?: This value may be null.
selectionArgs Array<String!>?: This value may be null.
Return
Int The number of rows affected.
Exceptions
android.database.SQLException

getType

Added in API level 33
fun getType(uri: Uri): String

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

Parameters
uri Uri: This value cannot be null.
Return
String This value cannot be null.

insert

Added in API level 33
fun insert(
    uri: Uri,
    values: ContentValues!
): Uri

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

Parameters
uri Uri: This value cannot be null.
values ContentValues!: This value cannot be null.
Return
Uri This value cannot be null.

onCreateCloudMediaSurfaceController

open fun onCreateCloudMediaSurfaceController(
    config: Bundle,
    callback: CloudMediaProvider.CloudMediaSurfaceStateChangedCallback
): CloudMediaProvider.CloudMediaSurfaceController?

Returns a CloudMediaSurfaceController used for rendering the preview of media items, or null if preview rendering is not supported.

Parameters
config Bundle: containing configuration parameters for CloudMediaSurfaceController This value cannot be null.
callback CloudMediaProvider.CloudMediaSurfaceStateChangedCallback: CloudMediaSurfaceStateChangedCallback to send state updates for Surface to picker launched via MediaStore#ACTION_PICK_IMAGES This value cannot be null.

onGetMediaCollectionInfo

abstract fun onGetMediaCollectionInfo(extras: Bundle): Bundle

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 onQueryMedia.

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 ContentResolver#EXTRA_HONORED_ARGS as part of the returned Bundle.

Parameters
extras Bundle: containing keys to filter result: This value cannot be null.
Return
Bundle Bundle containing CloudMediaProviderContract.MediaCollectionInfo This value cannot be null.

onOpenMedia

abstract fun onOpenMedia(
    mediaId: String,
    extras: Bundle?,
    signal: CancellationSignal?
): ParcelFileDescriptor

Returns the full size media item identified by mediaId.

If you block while downloading content, you should periodically check CancellationSignal#isCanceled() to abort abandoned open requests.

Parameters
mediaId String: the media item to return This value cannot be null.
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.
signal CancellationSignal?: used by the OS to signal if the request should be cancelled This value may be null.
Return
ParcelFileDescriptor read-only file descriptor for accessing the media file This value cannot be null.

See Also

onOpenPreview

abstract fun onOpenPreview(
    mediaId: String,
    size: Point,
    extras: Bundle?,
    signal: CancellationSignal?
): AssetFileDescriptor

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

The cloud media provider should strictly return thumbnail in the original CloudMediaProviderContract.MediaColumns#MIME_TYPE of the item.

This is expected to be a much lower resolution version than the item returned by onOpenMedia.

If you block while downloading content, you should periodically check CancellationSignal#isCanceled() to abort abandoned open requests.

Parameters
mediaId String: the media item to return This value cannot be null.
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.
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 CloudMediaProviderContract#EXTRA_PREVIEW_THUMBNAIL This value may be null.
signal CancellationSignal?: used by the OS to signal if the request should be cancelled This value may be null.
Return
AssetFileDescriptor read-only file descriptor for accessing the thumbnail for the media file This value cannot be null.

onQueryAlbums

open fun onQueryAlbums(extras: Bundle): Cursor

Returns a cursor representing all album items in the media collection optionally filtered by extras and sorted in reverse chronological order of CloudMediaProviderContract.AlbumColumns#DATE_TAKEN_MILLIS, i.e. most recent items first.

The cloud media provider must set the CloudMediaProviderContract#EXTRA_MEDIA_COLLECTION_ID as part of the returned Cursor#setExtras Bundle. Not setting this is an error and invalidates the returned Cursor.

If the provider handled any filters in extras, it must add the key to the ContentResolver#EXTRA_HONORED_ARGS as part of the returned Cursor#setExtras Bundle.

Parameters
extras Bundle: containing keys to filter album items: This value cannot be null.
Return
Cursor cursor representing album items containing all CloudMediaProviderContract.AlbumColumns columns This value cannot be null.

onQueryDeletedMedia

abstract fun onQueryDeletedMedia(extras: Bundle): Cursor

Returns a Cursor representing all deleted media items in the entire media collection within the current provider version as returned by onGetMediaCollectionInfo. These items can be optionally filtered by extras.

The cloud media provider must set the CloudMediaProviderContract#EXTRA_MEDIA_COLLECTION_ID as part of the returned Cursor#setExtras Bundle. Not setting this is an error and invalidates the returned Cursor.

If the provider handled any filters in extras, it must add the key to the ContentResolver#EXTRA_HONORED_ARGS as part of the returned Cursor#setExtras Bundle.

Parameters
extras Bundle: containing keys to filter deleted media items: This value cannot be null.
Return
Cursor cursor representing deleted media items containing just the CloudMediaProviderContract.MediaColumns#ID column This value cannot be null.

onQueryMedia

abstract fun onQueryMedia(extras: Bundle): Cursor

Returns a cursor representing all media items in the media collection optionally filtered by extras and sorted in reverse chronological order of CloudMediaProviderContract.MediaColumns#DATE_TAKEN_MILLIS, i.e. most recent items first.

The cloud media provider must set the CloudMediaProviderContract#EXTRA_MEDIA_COLLECTION_ID as part of the returned Cursor#setExtras Bundle. Not setting this is an error and invalidates the returned Cursor.

If the cloud media provider handled any filters in extras, it must add the key to the ContentResolver#EXTRA_HONORED_ARGS as part of the returned Cursor#setExtras Bundle.

Parameters
extras Bundle: containing keys to filter media items: This value cannot be null.
Return
Cursor cursor representing media items containing all CloudMediaProviderContract.MediaColumns columns This value cannot be null.

openFile

Added in API level 33
fun openFile(
    uri: Uri,
    mode: String
): ParcelFileDescriptor

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

Parameters
uri Uri: This value cannot be null.
mode String: This value cannot be null.
Return
ParcelFileDescriptor This value cannot be null.
Exceptions
java.io.FileNotFoundException Throws FileNotFoundException if there is no file associated with the given URI or the mode is invalid.
java.lang.SecurityException Throws SecurityException if the caller does not have permission to access the file.

See Also

openFile

Added in API level 33
fun openFile(
    uri: Uri,
    mode: String,
    signal: CancellationSignal?
): ParcelFileDescriptor

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

Parameters
uri Uri: This value cannot be null.
mode String: This value cannot be null.
signal CancellationSignal?: This value may be null.
Return
ParcelFileDescriptor This value cannot be null.
Exceptions
java.io.FileNotFoundException Throws FileNotFoundException if there is no file associated with the given URI or the mode is invalid.
java.lang.SecurityException Throws SecurityException if the caller does not have permission to access the file.

See Also

openTypedAssetFile

Added in API level 33
fun openTypedAssetFile(
    uri: Uri,
    mimeTypeFilter: String,
    opts: Bundle?
): AssetFileDescriptor

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

Parameters
uri Uri: This value cannot be null.
mimeTypeFilter String: This value cannot be null.
opts Bundle?: This value may be null.
Return
AssetFileDescriptor This value cannot be null.
Exceptions
java.io.FileNotFoundException Throws FileNotFoundException if there is no file associated with the given URI or the mode is invalid.
java.lang.SecurityException Throws SecurityException if the caller does not have permission to access the data.
java.lang.IllegalArgumentException Throws IllegalArgumentException if the content provider does not support the requested MIME type.

openTypedAssetFile

Added in API level 33
fun openTypedAssetFile(
    uri: Uri,
    mimeTypeFilter: String,
    opts: Bundle?,
    signal: CancellationSignal?
): AssetFileDescriptor

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

Parameters
uri Uri: This value cannot be null.
mimeTypeFilter String: This value cannot be null.
opts Bundle?: This value may be null.
signal CancellationSignal?: This value may be null.
Return
AssetFileDescriptor This value cannot be null.
Exceptions
java.io.FileNotFoundException Throws FileNotFoundException if there is no file associated with the given URI or the mode is invalid.
java.lang.SecurityException Throws SecurityException if the caller does not have permission to access the data.
java.lang.IllegalArgumentException Throws IllegalArgumentException if the content provider does not support the requested MIME type.

query

Added in API level 33
fun query(
    uri: Uri,
    projection: Array<String!>?,
    queryArgs: Bundle?,
    cancellationSignal: CancellationSignal?
): Cursor

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

Parameters
uri Uri: This value cannot be null.
projection Array<String!>?: This value may be null.
queryArgs Bundle?: This value may be null.
cancellationSignal CancellationSignal?: This value may be null.
Return
Cursor This value cannot be null.

query

Added in API level 33
fun query(
    uri: Uri,
    projection: Array<String!>?,
    selection: String?,
    selectionArgs: Array<String!>?,
    sortOrder: String?
): Cursor

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

Parameters
uri Uri: This value cannot be null.
projection Array<String!>?: This value may be null.
selection String?: This value may be null.
selectionArgs Array<String!>?: This value may be null.
sortOrder String?: This value may be null.
Return
Cursor This value cannot be null.

query

Added in API level 33
fun query(
    uri: Uri,
    projection: Array<String!>?,
    selection: String?,
    selectionArgs: Array<String!>?,
    sortOrder: String?,
    cancellationSignal: CancellationSignal?
): Cursor

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

Parameters
uri Uri: This value cannot be null.
projection Array<String!>?: This value may be null.
selection String?: This value may be null.
selectionArgs Array<String!>?: This value may be null.
sortOrder String?: This value may be null.
cancellationSignal CancellationSignal?: This value may be null.
Return
Cursor This value cannot be null.

update

Added in API level 33
fun update(
    uri: Uri,
    values: ContentValues!,
    selection: String?,
    selectionArgs: Array<String!>?
): Int

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

Parameters
uri Uri: This value cannot be null.
values ContentValues!: This value cannot be null.
selection String?: This value may be null.
selectionArgs Array<String!>?: This value may be null.
Return
Int the number of rows affected.