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 |
This class is used by |
Inherited constants | |
---|---|
Public constructors | |
---|---|
Public methods | |
---|---|
Unit |
attachInfo(context: Context, info: ProviderInfo) Implementation is provided by the parent class. |
Bundle |
Implementation is provided by the parent class. |
Uri |
canonicalize(uri: Uri) Implementation is provided by the parent class. |
Int |
Implementation is provided by the parent class. |
String |
Implementation is provided by the parent class. |
Uri |
insert(uri: Uri, values: ContentValues!) Implementation is provided by the parent class. |
open CloudMediaProvider.CloudMediaSurfaceController? |
onCreateCloudMediaSurfaceController(config: Bundle, callback: CloudMediaProvider.CloudMediaSurfaceStateChangedCallback) Returns a |
abstract Bundle |
onGetMediaCollectionInfo(extras: 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 |
abstract AssetFileDescriptor |
onOpenPreview(mediaId: String, size: Point, extras: Bundle?, signal: CancellationSignal?) Returns a thumbnail of |
open Cursor |
onQueryAlbums(extras: Bundle) Returns a cursor representing all album items in the media collection optionally filtered by |
abstract Cursor |
onQueryDeletedMedia(extras: Bundle) Returns a |
abstract Cursor |
onQueryMedia(extras: Bundle) Returns a cursor representing all media items in the media collection optionally filtered by |
ParcelFileDescriptor |
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 |
Implementation is provided by the parent class. |
Inherited functions | |
---|---|
Public constructors
Public methods
attachInfo
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
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
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
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
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
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
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 . |
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:
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:
null . |
Return | |
---|---|
Cursor |
cursor representing media items containing all CloudMediaProviderContract.MediaColumns columns This value cannot be null . |
openFile
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
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
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. |
See Also
openTypedAssetFile
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. |
See Also
query
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
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
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
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. |