Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Inherited Constants](https://developer.android.com/reference/android/test/mock/MockContentProvider#inhconstants) \| [Ctors](https://developer.android.com/reference/android/test/mock/MockContentProvider#pubctors) \| [Protected Ctors](https://developer.android.com/reference/android/test/mock/MockContentProvider#proctors) \| [Methods](https://developer.android.com/reference/android/test/mock/MockContentProvider#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/android/test/mock/MockContentProvider#inhmethods)

# MockContentProvider

*** ** * ** ***


`
public


class
MockContentProvider
`


`


`

`

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.test.mock.MockContentProvider |

<br />

*** ** * ** ***

Mock implementation of ContentProvider. All methods are non-functional and throw
`https://developer.android.com/reference/java/lang/UnsupportedOperationException`. Tests can extend this class to
implement behavior needed for tests.

## Summary

### 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/test/mock/MockContentProvider#MockContentProvider(android.content.Context)(https://developer.android.com/reference/android/content/Context context) ` A constructor accepting a Context instance, which is supposed to be the subclasss of `https://developer.android.com/reference/android/test/mock/MockContext`. |
| ` https://developer.android.com/reference/android/test/mock/MockContentProvider#MockContentProvider(android.content.Context,%20java.lang.String,%20java.lang.String,%20android.content.pm.PathPermission[])(https://developer.android.com/reference/android/content/Context context, https://developer.android.com/reference/java/lang/String readPermission, https://developer.android.com/reference/java/lang/String writePermission, https://developer.android.com/reference/android/content/pm/PathPermission pathPermissions) ` A constructor which initialize four member variables which `https://developer.android.com/reference/android/content/ContentProvider` have internally. |

| ### Protected constructors ||
|---|---|
| ` https://developer.android.com/reference/android/test/mock/MockContentProvider#MockContentProvider()() ` A constructor using `https://developer.android.com/reference/android/test/mock/MockContext` instance as a Context in it. |

| ### Public methods ||
|---|---|
| ` https://developer.android.com/reference/android/content/ContentProviderResult` | ` https://developer.android.com/reference/android/test/mock/MockContentProvider#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/test/mock/MockContentProvider#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. |
| ` static void` | ` https://developer.android.com/reference/android/test/mock/MockContentProvider#attachInfoForTesting(android.content.ContentProvider,%20android.content.Context,%20android.content.pm.ProviderInfo)(https://developer.android.com/reference/android/content/ContentProvider provider, https://developer.android.com/reference/android/content/Context context, https://developer.android.com/reference/android/content/pm/ProviderInfo providerInfo) ` *This method was deprecated in API level 28. Use a mocking framework like [Mockito](https://github.com/mockito/mockito). New tests should be written using the [Android Testing Support Library](https://developer.android.com/tools/testing-support-library).* |
| ` int` | ` https://developer.android.com/reference/android/test/mock/MockContentProvider#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) ` If you're reluctant to implement this manually, please just call super.bulkInsert(). |
| ` https://developer.android.com/reference/android/os/Bundle` | ` https://developer.android.com/reference/android/test/mock/MockContentProvider#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 request, https://developer.android.com/reference/android/os/Bundle args) ` |
| ` int` | ` https://developer.android.com/reference/android/test/mock/MockContentProvider#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. |
| ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/android/test/mock/MockContentProvider#getStreamTypes(android.net.Uri,%20java.lang.String)(https://developer.android.com/reference/android/net/Uri url, 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. |
| ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/android/test/mock/MockContentProvider#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/test/mock/MockContentProvider#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. |
| ` https://developer.android.com/reference/android/net/Uri` | ` https://developer.android.com/reference/android/test/mock/MockContentProvider#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/test/mock/MockContentProvider#onCreate()() ` Implement this to initialize your content provider on startup. |
| ` https://developer.android.com/reference/android/content/res/AssetFileDescriptor` | ` https://developer.android.com/reference/android/test/mock/MockContentProvider#openTypedAssetFile(android.net.Uri,%20java.lang.String,%20android.os.Bundle)(https://developer.android.com/reference/android/net/Uri url, https://developer.android.com/reference/java/lang/String mimeType, 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/test/mock/MockContentProvider#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. |
| ` int` | ` https://developer.android.com/reference/android/test/mock/MockContentProvider#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. |

### 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

### MockContentProvider

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

```
public MockContentProvider (Context context)
```

A constructor accepting a Context instance, which is supposed to be the subclasss of
`https://developer.android.com/reference/android/test/mock/MockContext`.

<br />

| Parameters ||
|---|---|
| `context` | `Context` <br /> |

### MockContentProvider

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

```
public MockContentProvider (Context context, 
                String readPermission, 
                String writePermission, 
                PathPermission[] pathPermissions)
```

A constructor which initialize four member variables which
`https://developer.android.com/reference/android/content/ContentProvider` have internally.

<br />

| Parameters ||
|---|---|
| `context` | `Context`: A Context object which should be some mock instance (like the instance of `https://developer.android.com/reference/android/test/mock/MockContext`). <br /> |
| `readPermission` | `String`: The read permision you want this instance should have in the test, which is available via `https://developer.android.com/reference/android/content/ContentProvider#getReadPermission()`. <br /> |
| `writePermission` | `String`: The write permission you want this instance should have in the test, which is available via `https://developer.android.com/reference/android/content/ContentProvider#getWritePermission()`. <br /> |
| `pathPermissions` | `PathPermission`: The PathPermissions you want this instance should have in the test, which is available via `https://developer.android.com/reference/android/content/ContentProvider#getPathPermissions()`. <br /> |

## Protected constructors

### MockContentProvider

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

```
protected MockContentProvider ()
```

A constructor using `https://developer.android.com/reference/android/test/mock/MockContext` instance as a Context in it.

<br />

## Public methods

### applyBatch

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

```
public ContentProviderResult[] applyBatch (ArrayList<ContentProviderOperation> operations)
```

<br />

<br />

| Parameters ||
|---|---|
| `operations` | `ArrayList`: This value cannot be `null`. <br /> |

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

### attachInfo

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

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

After being instantiated, this is called to tell the content provider
about itself.

<br />

| Parameters ||
|---|---|
| `context` | `Context`: The context this provider is running in <br /> |
| `info` | `ProviderInfo`: Registered information about this content provider <br /> |

### attachInfoForTesting

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

```
public static void attachInfoForTesting (ContentProvider provider, 
                Context context, 
                ProviderInfo providerInfo)
```


**This method was deprecated
in API level 28.**   

Use a mocking framework like [Mockito](https://github.com/mockito/mockito).
New tests should be written using the
[Android Testing Support Library](https://developer.android.com/tools/testing-support-library).

Like `https://developer.android.com/reference/android/test/mock/MockContentProvider#attachInfo(android.content.Context,%20android.content.pm.ProviderInfo)`, but for use
when directly instantiating the provider for testing.

Provided for use by `android.test.ProviderTestCase2` and
`android.test.RenamingDelegatingContext`.

<br />

| Parameters ||
|---|---|
| `provider` | `ContentProvider` <br /> |
| `context` | `Context` <br /> |
| `providerInfo` | `ProviderInfo` <br /> |

### bulkInsert

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

```
public int bulkInsert (Uri uri, 
                ContentValues[] values)
```

If you're reluctant to implement this manually, please just call super.bulkInsert().

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: The content:// URI of the insertion request. This value cannot be `null`. <br /> |
| `values` | `ContentValues`: An array of sets of column_name/value pairs to add to the database. This must not be `null`. <br /> |

| Returns ||
|---|---|
| `int` | The number of values that were inserted. <br /> |

### call

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

```
public Bundle call (String method, 
                String request, 
                Bundle args)
```

<br />

<br />

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

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

### delete

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

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

Implement this to handle requests to delete one or more rows. The
implementation should apply the selection clause when performing
deletion, allowing the operation to affect multiple rows in a directory.
As a courtesy, call
`https://developer.android.com/reference/android/content/ContentResolver#notifyChange(android.net.Uri,%20android.database.ContentObserver)` after deleting. This method can be called from multiple
threads, as described in [Processes
and Threads](https://developer.android.com/guide/topics/fundamentals/processes-and-threads#Threads).


The implementation is responsible for parsing out a row ID at the end of
the URI, if a specific row is being deleted. That is, the client would
pass in `content://contacts/people/22` and the implementation
is responsible for parsing the record number (22) when creating a SQL
statement.

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: The full URI to query, including a row ID (if a specific record is requested). This value cannot be `null`. <br /> |
| `selection` | `String`: An optional restriction to apply to rows when deleting. This value may be `null`. <br /> |
| `selectionArgs` | `String`: This value may be `null`. <br /> |

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

### getStreamTypes

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

```
public String[] getStreamTypes (Uri url, 
                String mimeTypeFilter)
```

Called by a client to determine the types of data streams that this
content provider supports for the given URI. The default implementation
returns `null`, meaning no types. If your content provider stores data
of a particular type, return that MIME type if it matches the given
mimeTypeFilter. If it can perform type conversions, return an array
of all supported MIME types that match mimeTypeFilter.

<br />

| Parameters ||
|---|---|
| `url` | `Uri`: The data in the content provider being queried. This value cannot be `null`. <br /> |
| `mimeTypeFilter` | `String`: The type of data the client desires. May be a pattern, such as \*/\* to retrieve all possible data types. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | Returns `null` if there are no possible data streams for the given mimeTypeFilter. Otherwise returns an array of all available concrete MIME types. <br /> |

### getType

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

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

Implement this to handle requests for the MIME type of the data at the
given URI. The returned MIME type should start with
`vnd.android.cursor.item` for a single record,
or `vnd.android.cursor.dir/` for multiple items.
This method can be called from multiple threads, as described in
[Processes
and Threads](https://developer.android.com/guide/topics/fundamentals/processes-and-threads#Threads).

Note that by default there are no permissions needed for an application to
access this information; if your content provider requires read and/or
write permissions, or is not exported, all applications can still call
this method regardless of their access permissions.

If your mime type reveals details that should be protected,
then you should protect this method by implementing `https://developer.android.com/reference/android/content/ContentProvider#getTypeAnonymous(android.net.Uri)`.
Implementing `https://developer.android.com/reference/android/content/ContentProvider#getTypeAnonymous(android.net.Uri)` ensures your `https://developer.android.com/reference/android/content/ContentProvider#getType(android.net.Uri)` can be
only accessed by caller's having associated readPermission for the URI.

<br />

<br />

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

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | a MIME type string, or `null` if there is no type. <br /> |

### getTypeAnonymous

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

```
public String getTypeAnonymous (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.

If your mime type reveals details that should be protected, then you should protect those
by implementing those in `https://developer.android.com/reference/android/content/ContentProvider#getType(android.net.Uri)`, and in this function, only return types of
URIs which can be obtained by anyone without any access.

Implementing ths function will make sure `https://developer.android.com/reference/android/content/ContentProvider#getType(android.net.Uri)` is protected by readPermission.
This function by default works as the `https://developer.android.com/reference/android/content/ContentProvider#getType(android.net.Uri)`

<br />

<br />

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

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | a MIME type string, or `null` if type needs to be protected. <br /> |

### insert

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

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

Implement this to handle requests to insert a new row. As a courtesy,
call
`https://developer.android.com/reference/android/content/ContentResolver#notifyChange(android.net.Uri,%20android.database.ContentObserver)` after inserting. This method can be called from multiple
threads, as described in [Processes
and Threads](https://developer.android.com/guide/topics/fundamentals/processes-and-threads#Threads).

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: The content:// URI of the insertion request. This value cannot be `null`. <br /> |
| `values` | `ContentValues`: A set of column_name/value pairs to add to the database. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/net/Uri` | The URI for the newly inserted item. This value may be `null`. <br /> |

### onCreate

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

```
public boolean onCreate ()
```

Implement this to initialize your content provider on startup.
This method is called for all registered content providers on the
application main thread at application launch time. It must not perform
lengthy operations, or application startup will be delayed.

You should defer nontrivial initialization (such as opening,
upgrading, and scanning databases) until the content provider is used
(via `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/content/ContentProvider#insert(android.net.Uri,%20android.content.ContentValues)`, etc). Deferred initialization
keeps application startup fast, avoids unnecessary work if the provider
turns out not to be needed, and stops database errors (such as a full
disk) from halting application launch.

If you use SQLite, `https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper`
is a helpful utility class that makes it easy to manage databases,
and will automatically defer opening until first use. If you do use
SQLiteOpenHelper, make sure to avoid calling
`https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper#getReadableDatabase()` or
`https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper#getWritableDatabase()`
from this method. (Instead, override
`https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper#onOpen(android.database.sqlite.SQLiteDatabase)` to initialize the
database when it is first opened.)

<br />

| Returns ||
|---|---|
| `boolean` | true if the provider was successfully loaded, false otherwise <br /> |

### openTypedAssetFile

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

```
public AssetFileDescriptor openTypedAssetFile (Uri url, 
                String mimeType, 
                Bundle opts)
```

Called by a client to open a read-only stream containing data of a
particular MIME type. This is like `https://developer.android.com/reference/android/content/ContentProvider#openAssetFile(android.net.Uri,%20java.lang.String)`,
except the file can only be read-only and the content provider may
perform data conversions to generate data of the desired type.

The default implementation compares the given mimeType against the
result of `https://developer.android.com/reference/android/content/ContentProvider#getType(android.net.Uri)` and, if they match, simply calls
`https://developer.android.com/reference/android/content/ContentProvider#openAssetFile(android.net.Uri,%20java.lang.String)`.

See `https://developer.android.com/reference/android/content/ClipData` for examples of the use and implementation
of this method.


The returned AssetFileDescriptor can be a pipe or socket pair to enable
streaming of data.

For better interoperability with other applications, it is recommended
that for any URIs that can be opened, you also support queries on them
containing at least the columns specified by `https://developer.android.com/reference/android/provider/OpenableColumns`.
You may also want to support other common columns if you have additional meta-data
to supply, such as `https://developer.android.com/reference/android/provider/MediaStore.MediaColumns#DATE_ADDED`
in `https://developer.android.com/reference/android/provider/MediaStore.MediaColumns`.

<br />

<br />

| Parameters ||
|---|---|
| `url` | `Uri`: The data in the content provider being queried. This value cannot be `null`. <br /> |
| `mimeType` | `String`: The type of data the client desires. May be a pattern, such as \*/\*, if the caller does not have specific type requirements; in this case the content provider will pick its best type matching the pattern. This value cannot be `null`. <br /> |
| `opts` | `Bundle`: Additional options from the client. The definitions of these are specific to the content provider being called. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/content/res/AssetFileDescriptor` | Returns a new AssetFileDescriptor from which the client can read data of the desired type. This value may be `null`. <br /> |

### query

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

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

Implement this to handle query requests from clients.

Apps targeting `https://developer.android.com/reference/android/os/Build.VERSION_CODES#O` or higher should override
`https://developer.android.com/reference/android/content/ContentProvider#query(android.net.Uri,%20java.lang.String[],%20android.os.Bundle,%20android.os.CancellationSignal)` and provide a stub
implementation of this method.

This method can be called from multiple threads, as described in
[Processes
and Threads](https://developer.android.com/guide/topics/fundamentals/processes-and-threads#Threads).


Example client call:


```
// Request a specific record.
Cursor managedCursor = managedQuery(
               ContentUris.withAppendedId(Contacts.People.CONTENT_URI, 2),
               projection,    // Which columns to return.
               null,          // WHERE clause.
               null,          // WHERE clause value substitution
               People.NAME + " ASC");   // Sort order.
```
Example implementation:


```
// SQLiteQueryBuilder is a helper class that creates the
       // proper SQL syntax for us.
       SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder();

       // Guard against SQL injection attacks
       qBuilder.setStrict(true);
       qBuilder.setProjectionMap(MAP_OF_QUERYABLE_COLUMNS);
       qBuilder.setStrictColumns(true);
       qBuilder.setStrictGrammar(true);

       // Set the table we're querying.
       qBuilder.setTables(DATABASE_TABLE_NAME);

       // If the query ends in a specific record number, we're
       // being asked for a specific record, so set the
       // WHERE clause in our query.
       if((URI_MATCHER.match(uri)) == SPECIFIC_MESSAGE){
           qBuilder.appendWhere("_id=" + uri.getPathLeafId());
       }

       // Make the query.
       Cursor c = qBuilder.query(mDb,
               projection,
               selection,
               selectionArgs,
               groupBy,
               having,
               sortOrder);
       c.setNotificationUri(getContext().getContentResolver(), uri);
       return c;
```

<br />

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: The URI to query. This will be the full URI sent by the client; if the client is requesting a specific record, the URI will end in a record number that the implementation should parse and add to a WHERE or HAVING clause, specifying that _id value. This value cannot be `null`. <br /> |
| `projection` | `String`: The list of columns to put into the cursor. If `null` all columns are included. <br /> |
| `selection` | `String`: A selection criteria to apply when filtering rows. If `null` then all rows are included. <br /> |
| `selectionArgs` | `String`: You may include ?s in selection, which will be replaced by the values from selectionArgs, in order that they appear in the selection. The values will be bound as Strings. This value may be `null`. <br /> |
| `sortOrder` | `String`: How the rows in the cursor should be sorted. If `null` then the provider is free to define the sort order. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | a Cursor or `null`. <br /> |

### update

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

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

Implement this to handle requests to update one or more rows. The
implementation should update all rows matching the selection to set the
columns according to the provided values map. As a courtesy, call
`https://developer.android.com/reference/android/content/ContentResolver#notifyChange(android.net.Uri,%20android.database.ContentObserver)` after updating. This method can be called from multiple
threads, as described in [Processes
and Threads](https://developer.android.com/guide/topics/fundamentals/processes-and-threads#Threads).

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: The URI to query. This can potentially have a record ID if this is an update request for a specific record. This value cannot be `null`. <br /> |
| `values` | `ContentValues`: A set of column_name/value pairs to update in the database. This value may be `null`. <br /> |
| `selection` | `String`: An optional filter to match rows to update. This value may be `null`. <br /> |
| `selectionArgs` | `String`: This value may be `null`. <br /> |

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