CloudMediaProvider | API reference | Android Developers
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:
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.
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(Bundle).
Nested classes
class
CloudMediaProvider.CloudMediaSurfaceController
Manages rendering the preview of media items on given instances of Surface.
class
CloudMediaProvider.CloudMediaSurfaceStateChangedCallback
This class is used by CloudMediaProvider to send Surface state updates to
picker launched via MediaStore.ACTION_PICK_IMAGES.
Inherited constants | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
From interface
|
Public constructors | |
|---|---|
CloudMediaProvider()
|
|
Public methods | |
|---|---|
final
void
|
attachInfo(Context context, ProviderInfo info)
Implementation is provided by the parent class. |
final
Bundle
|
call(String method, String arg, Bundle extras)
Implementation is provided by the parent class. |
final
Uri
|
canonicalize(Uri uri)
Implementation is provided by the parent class. |
final
int
|
delete(Uri uri, String selection, String[] selectionArgs)
Implementation is provided by the parent class. |
final
String
|
getType(Uri uri)
Implementation is provided by the parent class. |
final
Uri
|
insert(Uri uri, ContentValues values)
Implementation is provided by the parent class. |
CloudMediaProvider.CloudMediaSurfaceController
|
onCreateCloudMediaSurfaceController(Bundle config, CloudMediaProvider.CloudMediaSurfaceStateChangedCallback callback)
Returns a |
CloudMediaProviderContract.Capabilities
|
onGetCapabilities()
Returns the |
abstract
Bundle
|
onGetMediaCollectionInfo(Bundle extras)
Returns metadata about the media collection itself. |
abstract
ParcelFileDescriptor
|
onOpenMedia(String mediaId, Bundle extras, CancellationSignal signal)
Returns the full size media item identified by |
abstract
AssetFileDescriptor
|
onOpenPreview(String mediaId, Point size, Bundle extras, CancellationSignal signal)
Returns a thumbnail of The cloud media provider should strictly return thumbnail in the original
|
Cursor
|
onQueryAlbums(Bundle extras)
Returns a cursor representing all album items in the media collection optionally filtered
by |
abstract
Cursor
|
onQueryDeletedMedia(Bundle extras)
Returns a |
abstract
Cursor
|
onQueryMedia(Bundle extras)
Returns a cursor representing all media items in the media collection optionally filtered by
|
Cursor
|
onQueryMediaCategories(String parentCategoryId, Bundle extras, CancellationSignal cancellationSignal)
Queries for the available MediaCategories under the given |
Cursor
|
onQueryMediaInMediaSet(String mediaSetId, Bundle extras, CancellationSignal cancellationSignal)
Queries for the available media items under a given |
Cursor
|
onQueryMediaSets(String mediaCategoryId, Bundle extras, CancellationSignal cancellationSignal)
Queries for the available MediaSets under a given |
Cursor
|
onQuerySearchSuggestions(String prefixText, Bundle extras, CancellationSignal cancellationSignal)
Queries for the available SearchSuggestions based on a |
Cursor
|
onSearchMedia(String searchText, Bundle extras, CancellationSignal cancellationSignal)
Searches media items based on entered search text, managed by |
Cursor
|
onSearchMedia(String suggestedMediaSetId, String fallbackSearchText, Bundle extras, CancellationSignal cancellationSignal)
Searches media items based on a selected suggestion, managed by |
final
ParcelFileDescriptor
|
openFile(Uri uri, String mode, CancellationSignal signal)
Implementation is provided by the parent class. |
final
ParcelFileDescriptor
|
openFile(Uri uri, String mode)
Implementation is provided by the parent class. |
final
AssetFileDescriptor
|
openTypedAssetFile(Uri uri, String mimeTypeFilter, Bundle opts)
Implementation is provided by the parent class. |
final
AssetFileDescriptor
|
openTypedAssetFile(Uri uri, String mimeTypeFilter, Bundle opts, CancellationSignal signal)
Implementation is provided by the parent class. |
final
Cursor
|
query(Uri uri, String[] projection, Bundle queryArgs, CancellationSignal cancellationSignal)
Implementation is provided by the parent class. |
final
Cursor
|
query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, CancellationSignal cancellationSignal)
Implementation is provided by the parent class. |
final
Cursor
|
query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
Implementation is provided by the parent class. |
final
int
|
update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
Implementation is provided by the parent class. |
Inherited methods | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
From class
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
From class
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
From interface
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
From interface
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public constructors
CloudMediaProvider
public CloudMediaProvider ()
Public methods
attachInfo
public final void attachInfo (Context context, ProviderInfo info)
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
public final Bundle call (String method, String arg, Bundle extras)
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. |
| Returns | |
|---|---|
Bundle |
This value cannot be null. |
canonicalize
public final Uri canonicalize (Uri uri)
Implementation is provided by the parent class. Throws by default, and cannot be overridden.
| Parameters | |
|---|---|
uri |
Uri: This value cannot be null. |
| Returns | |
|---|---|
Uri |
This value cannot be null. |
delete
public final int delete (Uri uri, String selection, String[] selectionArgs)
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 |
String: This value may be null. |
| Returns | |
|---|---|
int |
The number of rows affected. |
getType
public final String getType (Uri uri)
Implementation is provided by the parent class. Throws by default, and cannot be overridden.
| Parameters | |
|---|---|
uri |
Uri: This value cannot be null. |
| Returns | |
|---|---|
String |
This value cannot be null. |
insert
public final Uri insert (Uri uri, ContentValues values)
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. |
| Returns | |
|---|---|
Uri |
This value cannot be null. |
onOpenMedia
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
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. |
| Returns | |
|---|---|
ParcelFileDescriptor |
read-only file descriptor for accessing the media file.
This value cannot be null. |
| Throws | |
|---|---|
FileNotFoundException |
|
onQueryMediaCategories
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 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
CloudMediaProviderContract.EXTRA_MEDIA_COLLECTION_ID as part of the returned cursor
by using Cursor.setExtras. Not setting this is an error and invalidates the
returned 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 ContentResolver.EXTRA_HONORED_ARGS as part of the returned cursor by using
Cursor.setExtras. 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.
| Parameters | |
|---|---|
parentCategoryId |
String: the ID of the parent category to filter media categories.
This value may be null. |
extras |
Bundle: containing keys to filter media categories:
.
This value cannot be null. |
cancellationSignal |
CancellationSignal: CancellationSignal to check if request has been cancelled.
This value may be null. |
| Returns | |
|---|---|
Cursor |
cursor with CloudMediaProviderContract.MediaCategoryColumns columns |
onQueryMediaSets
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
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
CloudMediaProviderContract.EXTRA_MEDIA_COLLECTION_ID as part of the returned cursor
by using Cursor.setExtras . Not setting this is an error and invalidates the
returned 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 ContentResolver.EXTRA_HONORED_ARGS as part of the returned cursor by using
Cursor.setExtras. 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
CloudMediaProviderContract.EXTRA_PAGE_TOKEN as the next page token,
as part of the returned cursor by using Cursor.setExtras.
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 Cursor.setExtras until the last page at which point it should not
set a token in the returned cursor.
| Parameters | |
|---|---|
mediaCategoryId |
String: the ID of the media category to filter media sets.
This value cannot be null. |
extras |
Bundle: containing keys to filter media sets:
This value cannot be null. |
cancellationSignal |
CancellationSignal: CancellationSignal to check if request has been cancelled.
This value may be null. |
| Returns | |
|---|---|
Cursor |
cursor representing CloudMediaProviderContract.MediaSetColumns columns.
This value cannot be null. |
onQuerySearchSuggestions
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
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
CloudMediaProviderContract.EXTRA_MEDIA_COLLECTION_ID as part of the returned cursor
by using Cursor.setExtras . Not setting this is an error and invalidates the
returned 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 ContentResolver.EXTRA_HONORED_ARGS as part of the returned cursor by using
Cursor.setExtras. 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.
| Parameters | |
|---|---|
prefixText |
String: the prefix text to filter search suggestions.
This value cannot be null. |
extras |
Bundle: containing keys to filter search suggestions.
.
This value cannot be null. |
cancellationSignal |
CancellationSignal: CancellationSignal to check if request has been cancelled.
This value may be null. |
| Returns | |
|---|---|
Cursor |
cursor representing search suggestions containing all
CloudMediaProviderContract.SearchSuggestionColumns columns.
This value cannot be null. |
onSearchMedia
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 CloudMediaProviderContract.MediaColumns based on the match.
The cloud media provider must set the
CloudMediaProviderContract.EXTRA_MEDIA_COLLECTION_ID as part of the returned cursor
by using Cursor.setExtras . Not setting this is an error and invalidates the
returned 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 ContentResolver.EXTRA_HONORED_ARGS as part of the returned cursor by using
Cursor.setExtras. If not honored, photo picker will assume the result of the query is
without the extra being used.
An example user journey:
- User enters the search prompt.
- Using
onQuerySearchSuggestions(String, Bundle, CancellationSignal), photo picker display suggestions as the user keeps typing. - User types completely and then enters search,
Photo picker calls:
onSearchMedia(searchText, extras)
If the cloud media provider supports pagination, they can set
CloudMediaProviderContract.EXTRA_PAGE_TOKEN as the next page token,
as part of the returned cursor by using Cursor.setExtras.
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 Cursor.setExtras 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.
| Parameters | |
|---|---|
searchText |
String: search text to be used.
This value cannot be null. |
extras |
Bundle: containing keys to manage the search results:
This value cannot be null. |
cancellationSignal |
CancellationSignal: CancellationSignal to check if request has been cancelled.
This value may be null. |
| Returns | |
|---|---|
Cursor |
cursor of CloudMediaProviderContract.MediaColumns based on the match.
This value cannot be null. |
onSearchMedia
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 CloudMediaProviderContract.MediaColumns based on the match.
The cloud media provider must set the
CloudMediaProviderContract.EXTRA_MEDIA_COLLECTION_ID as part of the returned cursor
by using Cursor.setExtras . Not setting this is an error and invalidates the
returned 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 ContentResolver.EXTRA_HONORED_ARGS as part of the returned cursor by using
Cursor.setExtras. If not honored, photo picker will assume the result of the query is
without the extra being used.
An example user journey:
- User enters the search prompt.
- Using
onQuerySearchSuggestions(String, Bundle, CancellationSignal), photo picker display suggestions as the user keeps typing. - User selects a suggestion, Photo picker calls:
onSearchMedia(suggestedMediaSetId, fallbackSearchText, extras)with thesuggestedMediaSetIdcorresponding to the user chosen suggestion.CloudMediaProviderContract.SearchSuggestionColumns.MEDIA_SET_ID
If the cloud media provider supports pagination, they can set
CloudMediaProviderContract.EXTRA_PAGE_TOKEN as the next page token,
as part of the returned cursor by using Cursor.setExtras.
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 Cursor.setExtras 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.
| Parameters | |
|---|---|
suggestedMediaSetId |
String: the media set ID of the suggestion that the user wants to search.
This value cannot be null. |
fallbackSearchText |
String: optional search text to be used when suggestedMediaSetId
is not useful.
This value may be null. |
extras |
Bundle: containing keys to manage the search results:
This value cannot be null. |
cancellationSignal |
CancellationSignal: CancellationSignal to check if request has been cancelled.
This value may be null. |
| Returns | |
|---|---|
Cursor |
cursor of CloudMediaProviderContract.MediaColumns based on the match.
This value cannot be null. |
query
public final Cursor query (Uri uri, String[] projection, Bundle queryArgs, CancellationSignal cancellationSignal)
Implementation is provided by the parent class. Cannot be overridden.
| Parameters | |
|---|---|
uri |
Uri: This value cannot be null. |
projection |
String: This value may be null. |
queryArgs |
Bundle: This value may be null. |
cancellationSignal |
CancellationSignal: This value may be null. |
| Returns | |
|---|---|
Cursor |
This value cannot be null. |
query
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.
| Parameters | |
|---|---|
uri |
Uri: This value cannot be null. |
projection |
String: This value may be null. |
selection |
String: This value may be null. |
selectionArgs |
String: This value may be null. |
sortOrder |
String: This value may be null. |
cancellationSignal |
CancellationSignal: This value may be null. |
| Returns | |
|---|---|
Cursor |
This value cannot be null. |
query
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.
| Parameters | |
|---|---|
uri |
Uri: This value cannot be null. |
projection |
String: This value may be null. |
selection |
String: This value may be null. |
selectionArgs |
String: This value may be null. |
sortOrder |
String: This value may be null. |
| Returns | |
|---|---|
Cursor |
This value cannot be null. |
update
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.
| Parameters | |
|---|---|
uri |
Uri: This value cannot be null. |
values |
ContentValues: This value cannot be null. |
selection |
String: This value may be null. |
selectionArgs |
String: This value may be null. |
| Returns | |
|---|---|
int |
the number of rows affected. |