# CredentialProviderService

Artifact: [androidx.credentials:credentials](https://developer.android.com/jetpack/androidx/releases/credentials) [View Source](https://cs.android.com/search?q=file:androidx/credentials/provider/CredentialProviderService.kt+class:androidx.credentials.provider.CredentialProviderService) Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

*** ** * ** ***

<br />

```
@RequiresApi(value = 34)
public abstract class CredentialProviderService extends CredentialProviderService
```

<br />

|---|---|---|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) ||||||
| ↳ | [android.content.Context](https://developer.android.com/reference/android/content/Context.html) |||||
|   | ↳ | [android.content.ContextWrapper](https://developer.android.com/reference/android/content/ContextWrapper.html) ||||
|   |   | ↳ | [android.app.Service](https://developer.android.com/reference/android/app/Service.html) |||
|   |   |   | ↳ | [android.service.credentials.CredentialProviderService](https://developer.android.com/reference/android/service/credentials/CredentialProviderService.html) ||
|   |   |   |   | ↳ | [androidx.credentials.provider.CredentialProviderService](https://developer.android.com/reference/androidx/credentials/provider/CredentialProviderService) |

*** ** * ** ***

A `https://developer.android.com/reference/androidx/credentials/provider/CredentialProviderService` is a service used to save and retrieve credentials for a given user, upon the request of a client app that typically uses these credentials for sign-in flows.

The credential retrieval and creation/saving is mediated by the Android System that aggregates credentials from multiple credential provider services, and presents them to the user in the form of a selector UI for credential selections/account selections/ confirmations etc.

A `https://developer.android.com/reference/androidx/credentials/provider/CredentialProviderService` is only bound to the Android System for the span of a `https://developer.android.com/reference/androidx/credentials/CredentialManager` get/create API call. The service is bound only if :

1. The service requires the `https://developer.android.com/reference/android/Manifest.permission.html#BIND_CREDENTIAL_PROVIDER_SERVICE` permission.

2. The user has enabled this service as a credential provider from the settings.

## Basic Usage

The basic Credential Manager flow is as such:

- Client app calls one of the APIs exposed in `https://developer.android.com/reference/androidx/credentials/CredentialManager`.

- Android system propagates the developer's request to providers that have been enabled by the user, and can support the `https://developer.android.com/reference/androidx/credentials/Credential` type specified in the request. We call this the **query phase** of provider communication. Developer may specify a different set of request parameters to be sent to the provider during this phase.

- In this query phase, providers, in most cases, will respond with a list of `https://developer.android.com/reference/android/service/credentials/CredentialEntry.html`, and an optional list of `https://developer.android.com/reference/androidx/credentials/provider/Action` entries (for the get flow), and a list of `https://developer.android.com/reference/androidx/credentials/provider/CreateEntry` (for the create flow). No actual credentials will be returned in this phase.

- Provider responses are aggregated and presented to the user in the form of a selector UI.

- User selects an entry on the selector.

- Android System invokes the `https://developer.android.com/reference/android/app/PendingIntent.html` associated with this entry, that belongs to the corresponding provider. We call this the **final phase** of provider communication. The `https://developer.android.com/reference/android/app/PendingIntent.html` contains the complete request originally created by the developer.

- Provider finishes the `https://developer.android.com/reference/android/app/Activity.html` invoked by the `https://developer.android.com/reference/android/app/PendingIntent.html` by setting the result as the activity is finished.

- Android System sends back the result to the client app.

The flow described above minimizes the amount of time a service is bound to the system. Calls to the service are considered stateless. If a service wishes to maintain state between the calls, it must do its own state management. Note: The service's process might be killed by the Android System when unbound, for cases such as low memory on the device.

## Service Registration

In order for Credential Manager to propagate requests to a given provider service, the provider must:

- Extend this class and implement the abstract methods.

- Declare the `https://developer.android.com/reference/android/service/credentials/CredentialProviderService.html#SERVICE_INTERFACE` intent as handled by the service.

- Require the `https://developer.android.com/reference/android/Manifest.permission.html#BIND_CREDENTIAL_PROVIDER_SERVICE` permission.

- Declare capabilities that the provider supports. Capabilities are essentially credential types that the provider can handle. Capabilities must be added to the metadata of the service against `https://developer.android.com/reference/android/service/credentials/CredentialProviderService.html#SERVICE_META_DATA`.

## Summary

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

| ### Public methods |
|---|---|
| `final void` | `https://developer.android.com/reference/androidx/credentials/provider/CredentialProviderService#onBeginCreateCredential(android.service.credentials.BeginCreateCredentialRequest,android.os.CancellationSignal,android.os.OutcomeReceiver)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/service/credentials/BeginCreateCredentialRequest.html request, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/CancellationSignal.html cancellationSignal, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/OutcomeReceiver.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/service/credentials/BeginCreateCredentialResponse.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/credentials/CreateCredentialException.html> callback )` |
| `abstract void` | `https://developer.android.com/reference/androidx/credentials/provider/CredentialProviderService#onBeginCreateCredentialRequest(androidx.credentials.provider.BeginCreateCredentialRequest,android.os.CancellationSignal,android.os.OutcomeReceiver)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/provider/BeginCreateCredentialRequest request, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/CancellationSignal.html cancellationSignal, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/OutcomeReceiver.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/provider/BeginCreateCredentialResponse, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/exceptions/CreateCredentialException> callback )` Called by the Android System in response to a client app calling `https://developer.android.com/reference/androidx/credentials/CredentialManager#createCredential(android.content.Context,androidx.credentials.CreateCredentialRequest)`, to create/save a credential with a credential provider installed on the device. |
| `final void` | `https://developer.android.com/reference/androidx/credentials/provider/CredentialProviderService#onBeginGetCredential(android.service.credentials.BeginGetCredentialRequest,android.os.CancellationSignal,android.os.OutcomeReceiver)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/service/credentials/BeginGetCredentialRequest.html request, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/CancellationSignal.html cancellationSignal, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/OutcomeReceiver.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/service/credentials/BeginGetCredentialResponse.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/credentials/GetCredentialException.html> callback )` |
| `abstract void` | `https://developer.android.com/reference/androidx/credentials/provider/CredentialProviderService#onBeginGetCredentialRequest(androidx.credentials.provider.BeginGetCredentialRequest,android.os.CancellationSignal,android.os.OutcomeReceiver)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/provider/BeginGetCredentialRequest request, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/CancellationSignal.html cancellationSignal, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/OutcomeReceiver.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/provider/BeginGetCredentialResponse, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/exceptions/GetCredentialException> callback )` Called by the Android System in response to a client app calling `https://developer.android.com/reference/androidx/credentials/CredentialManager#getCredential(android.content.Context,androidx.credentials.GetCredentialRequest)`, to get a credential sourced from a credential provider installed on the device. |
| `final void` | `https://developer.android.com/reference/androidx/credentials/provider/CredentialProviderService#onClearCredentialState(android.service.credentials.ClearCredentialStateRequest,android.os.CancellationSignal,android.os.OutcomeReceiver)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/service/credentials/ClearCredentialStateRequest.html request, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/CancellationSignal.html cancellationSignal, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/OutcomeReceiver.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Void.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/credentials/ClearCredentialStateException.html> callback )` |
| `abstract void` | `https://developer.android.com/reference/androidx/credentials/provider/CredentialProviderService#onClearCredentialStateRequest(androidx.credentials.provider.ProviderClearCredentialStateRequest,android.os.CancellationSignal,android.os.OutcomeReceiver)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/provider/ProviderClearCredentialStateRequest request, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/CancellationSignal.html cancellationSignal, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/OutcomeReceiver.html<https://developer.android.com/reference/java/lang/Void.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/exceptions/ClearCredentialException> callback )` Called by the Android System in response to a client app calling `https://developer.android.com/reference/androidx/credentials/CredentialManager#clearCredentialState(androidx.credentials.ClearCredentialStateRequest)`. |

### Inherited methods

From [android.content.Context](https://developer.android.com/reference/android/content/Context.html) `boolean` `https://developer.android.com/reference/android/content/Context.html#bindIsolatedService(android.content.Intent, android.content.Context.BindServiceFlags, java.lang.String, java.util.concurrent.Executor, android.content.ServiceConnection)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html service,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.BindServiceFlags.html flags,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html instanceName,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/concurrent/Executor.html executor,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ServiceConnection.html conn

)` `final int` `https://developer.android.com/reference/android/content/Context.html#getColor(int)(int id)` `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/res/ColorStateList.html` `https://developer.android.com/reference/android/content/Context.html#getColorStateList(int)(int id)` `final https://developer.android.com/reference/android/graphics/drawable/Drawable.html` `https://developer.android.com/reference/android/content/Context.html#getDrawable(int)(int id)` `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` `https://developer.android.com/reference/android/content/Context.html#getString(int)(int resId)` `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` `https://developer.android.com/reference/android/content/Context.html#getString(int, java.lang.Object...)(int resId, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Object.html... formatArgs)` `final @https://developer.android.com/reference/androidx/annotation/NonNull T` `<T extends https://developer.android.com/reference/java/lang/Object.html> https://developer.android.com/reference/android/content/Context.html#getSystemService(java.lang.Class&lt;T&gt;)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> serviceClass)` `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/CharSequence.html` `https://developer.android.com/reference/android/content/Context.html#getText(int)(int resId)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.BindServiceFlags.html` `https://developer.android.com/reference/android/content/Context.html#getUpdateableFlags()()` `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/res/TypedArray.html` `https://developer.android.com/reference/android/content/Context.html#obtainStyledAttributes(int[])(@https://developer.android.com/reference/androidx/annotation/NonNull int[] attrs)` `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/res/TypedArray.html` `https://developer.android.com/reference/android/content/Context.html#obtainStyledAttributes(int, int[])(int resid, @https://developer.android.com/reference/androidx/annotation/NonNull int[] attrs)` `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/res/TypedArray.html` `https://developer.android.com/reference/android/content/Context.html#obtainStyledAttributes(android.util.AttributeSet, int[])(https://developer.android.com/reference/android/util/AttributeSet.html set, @https://developer.android.com/reference/androidx/annotation/NonNull int[] attrs)` `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/res/TypedArray.html` `https://developer.android.com/reference/android/content/Context.html#obtainStyledAttributes(android.util.AttributeSet, int[], int, int)(

https://developer.android.com/reference/android/util/AttributeSet.html set,

@https://developer.android.com/reference/androidx/annotation/NonNull int[] attrs,

int defStyleAttr,

int defStyleRes

)` `void` `https://developer.android.com/reference/android/content/Context.html#revokeSelfPermissionOnKill(java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html permName)` `void` `https://developer.android.com/reference/android/content/Context.html#sendBroadcastWithMultiplePermissions(android.content.Intent, java.lang.String[])(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent,

@https://developer.android.com/reference/androidx/annotation/NonNull String[] receiverPermissions

)` From [android.content.ContextWrapper](https://developer.android.com/reference/android/content/ContextWrapper.html) `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#bindIsolatedService(android.content.Intent, int, java.lang.String, java.util.concurrent.Executor, android.content.ServiceConnection)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html service,

int flags,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html instanceName,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/concurrent/Executor.html executor,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ServiceConnection.html conn

)` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#bindService(android.content.Intent, android.content.ServiceConnection, android.content.Context.BindServiceFlags)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html service,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ServiceConnection.html conn,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.BindServiceFlags.html flags

)` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#bindService(android.content.Intent, android.content.ServiceConnection, int)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html service,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ServiceConnection.html conn,

int flags

)` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#bindService(android.content.Intent, android.content.Context.BindServiceFlags, java.util.concurrent.Executor, android.content.ServiceConnection)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html service,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.BindServiceFlags.html flags,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/concurrent/Executor.html executor,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ServiceConnection.html conn

)` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#bindService(android.content.Intent, int, java.util.concurrent.Executor, android.content.ServiceConnection)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html service,

int flags,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/concurrent/Executor.html executor,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ServiceConnection.html conn

)` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#bindServiceAsUser(android.content.Intent, android.content.ServiceConnection, android.content.Context.BindServiceFlags, android.os.UserHandle)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html service,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ServiceConnection.html conn,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.BindServiceFlags.html flags,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/UserHandle.html user

)` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#bindServiceAsUser(android.content.Intent, android.content.ServiceConnection, int, android.os.UserHandle)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html service,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ServiceConnection.html conn,

int flags,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/UserHandle.html user

)` `int` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkCallingOrSelfPermission(java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html permission)` `int` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkCallingOrSelfUriPermission(android.net.Uri, int)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/net/Uri.html uri, int modeFlags)` `@https://developer.android.com/reference/androidx/annotation/NonNull int[]` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkCallingOrSelfUriPermissions(java.util.List&lt;android.net.Uri&gt;, int)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/net/Uri.html> uris,

int modeFlags

)` `int` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkCallingPermission(java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html permission)` `int` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkCallingUriPermission(android.net.Uri, int)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/net/Uri.html uri, int modeFlags)` `@https://developer.android.com/reference/androidx/annotation/NonNull int[]` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkCallingUriPermissions(java.util.List&lt;android.net.Uri&gt;, int)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/net/Uri.html> uris, int modeFlags)` `int` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkContentUriPermissionFull(android.net.Uri, int, int, int)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/net/Uri.html uri,

int pid,

int uid,

int modeFlags

)` `int` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkPermission(java.lang.String, int, int)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html permission, int pid, int uid)` `int` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkSelfPermission(java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html permission)` `int` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkUriPermission(android.net.Uri, int, int, int)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/net/Uri.html uri, int pid, int uid, int modeFlags)` `int` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int)(

https://developer.android.com/reference/android/net/Uri.html uri,

https://developer.android.com/reference/java/lang/String.html readPermission,

https://developer.android.com/reference/java/lang/String.html writePermission,

int pid,

int uid,

int modeFlags

)` `@https://developer.android.com/reference/androidx/annotation/NonNull int[]` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkUriPermissions(java.util.List&lt;android.net.Uri&gt;, int, int, int)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/net/Uri.html> uris,

int pid,

int uid,

int modeFlags

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#clearWallpaper()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createAttributionContext(java.lang.String)(https://developer.android.com/reference/java/lang/String.html attributionTag)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createConfigurationContext(android.content.res.Configuration)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/res/Configuration.html overrideConfiguration)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createContext(android.content.ContextParams)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ContextParams.html contextParams)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createContextForSplit(java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html splitName)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createDeviceContext(int)(int deviceId)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createDeviceProtectedStorageContext()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createDisplayContext(android.view.Display)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/view/Display.html display)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createPackageContext(java.lang.String, int)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html packageName, int flags)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createWindowContext(int, android.os.Bundle)(int type, https://developer.android.com/reference/android/os/Bundle.html options)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createWindowContext(android.view.Display, int, android.os.Bundle)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/view/Display.html display, int type, https://developer.android.com/reference/android/os/Bundle.html options)` `@https://developer.android.com/reference/androidx/annotation/NonNull String[]` `https://developer.android.com/reference/android/content/ContextWrapper.html#databaseList()()` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#deleteDatabase(java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html name)` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#deleteFile(java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html name)` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#deleteSharedPreferences(java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html name)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#enforceCallingOrSelfPermission(java.lang.String, java.lang.String)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html permission,

https://developer.android.com/reference/java/lang/String.html message

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#enforceCallingOrSelfUriPermission(android.net.Uri, int, java.lang.String)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/net/Uri.html uri,

int modeFlags,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html message

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#enforceCallingPermission(java.lang.String, java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html permission, https://developer.android.com/reference/java/lang/String.html message)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#enforceCallingUriPermission(android.net.Uri, int, java.lang.String)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/net/Uri.html uri,

int modeFlags,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html message

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#enforcePermission(java.lang.String, int, int, java.lang.String)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html permission,

int pid,

int uid,

https://developer.android.com/reference/java/lang/String.html message

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#enforceUriPermission(android.net.Uri, int, int, int, java.lang.String)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/net/Uri.html uri,

int pid,

int uid,

int modeFlags,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html message

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#enforceUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int, java.lang.String)(

https://developer.android.com/reference/android/net/Uri.html uri,

https://developer.android.com/reference/java/lang/String.html readPermission,

https://developer.android.com/reference/java/lang/String.html writePermission,

int pid,

int uid,

int modeFlags,

https://developer.android.com/reference/java/lang/String.html message

)` `@https://developer.android.com/reference/androidx/annotation/NonNull String[]` `https://developer.android.com/reference/android/content/ContextWrapper.html#fileList()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getApplicationContext()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/pm/ApplicationInfo.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getApplicationInfo()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/res/AssetManager.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getAssets()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/AttributionSource.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getAttributionSource()()` `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getAttributionTag()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getBaseContext()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getCacheDir()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/ClassLoader.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getClassLoader()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getCodeCacheDir()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ContentResolver.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getContentResolver()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getDataDir()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getDatabasePath(java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html name)` `int` `https://developer.android.com/reference/android/content/ContextWrapper.html#getDeviceId()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getDir(java.lang.String, int)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html name, int mode)` `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/view/Display.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getDisplay()()` `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getExternalCacheDir()()` `@https://developer.android.com/reference/androidx/annotation/NonNull File[]` `https://developer.android.com/reference/android/content/ContextWrapper.html#getExternalCacheDirs()()` `https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getExternalFilesDir(java.lang.String)(https://developer.android.com/reference/java/lang/String.html type)` `@https://developer.android.com/reference/androidx/annotation/NonNull File[]` `https://developer.android.com/reference/android/content/ContextWrapper.html#getExternalFilesDirs(java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html type)` `@https://developer.android.com/reference/androidx/annotation/NonNull File[]` `https://developer.android.com/reference/android/content/ContextWrapper.html#getExternalMediaDirs()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getFileStreamPath(java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html name)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getFilesDir()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/concurrent/Executor.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getMainExecutor()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/Looper.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getMainLooper()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getNoBackupFilesDir()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getObbDir()()` `@https://developer.android.com/reference/androidx/annotation/NonNull File[]` `https://developer.android.com/reference/android/content/ContextWrapper.html#getObbDirs()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getOpPackageName()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getPackageCodePath()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/pm/PackageManager.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getPackageManager()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getPackageName()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getPackageResourcePath()()` `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/content/ContextParams.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getParams()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/res/Resources.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getResources()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/SharedPreferences.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getSharedPreferences(java.lang.String, int)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html name, int mode)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Object.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getSystemService(java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html name)` `https://developer.android.com/reference/java/lang/String.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getSystemServiceName(java.lang.Class&lt;?&gt;)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull ?> serviceClass)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/res/Resources.Theme.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getTheme()()` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/graphics/drawable/Drawable.html` `[getWallpaper](https://developer.android.com/reference/android/content/ContextWrapper.html#getWallpaper())()`

**This method is deprecated.** Deprecated in Java
`int` `[getWallpaperDesiredMinimumHeight](https://developer.android.com/reference/android/content/ContextWrapper.html#getWallpaperDesiredMinimumHeight())()`

**This method is deprecated.** Deprecated in Java
`int` `[getWallpaperDesiredMinimumWidth](https://developer.android.com/reference/android/content/ContextWrapper.html#getWallpaperDesiredMinimumWidth())()`

**This method is deprecated.** Deprecated in Java
`void` `https://developer.android.com/reference/android/content/ContextWrapper.html#grantUriPermission(java.lang.String, android.net.Uri, int)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html toPackage,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/net/Uri.html uri,

int modeFlags

)` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#isDeviceProtectedStorage()()` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#isRestricted()()` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#isUiContext()()` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#moveDatabaseFrom(android.content.Context, java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html sourceContext, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html name)` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#moveSharedPreferencesFrom(android.content.Context, java.lang.String)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html sourceContext,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html name

)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/FileInputStream.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#openFileInput(java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html name)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/FileOutputStream.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#openFileOutput(java.lang.String, int)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html name, int mode)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html name,

int mode,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory.html factory

)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html name,

int mode,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory.html factory,

https://developer.android.com/reference/android/database/DatabaseErrorHandler.html errorHandler

)` `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/graphics/drawable/Drawable.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#peekWallpaper()()` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#rebindService(android.content.ServiceConnection, android.content.Context.BindServiceFlags)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ServiceConnection.html conn,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.BindServiceFlags.html flags

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#registerComponentCallbacks(android.content.ComponentCallbacks)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ComponentCallbacks.html callback)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#registerDeviceIdChangeListener(java.util.concurrent.Executor, java.util.function.IntConsumer)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/concurrent/Executor.html executor,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/function/IntConsumer.html listener

)` `https://developer.android.com/reference/android/content/Intent.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter)(

https://developer.android.com/reference/android/content/BroadcastReceiver.html receiver,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/IntentFilter.html filter

)` `https://developer.android.com/reference/android/content/Intent.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, int)(

https://developer.android.com/reference/android/content/BroadcastReceiver.html receiver,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/IntentFilter.html filter,

int flags

)` `https://developer.android.com/reference/android/content/Intent.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler)(

https://developer.android.com/reference/android/content/BroadcastReceiver.html receiver,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/IntentFilter.html filter,

https://developer.android.com/reference/java/lang/String.html broadcastPermission,

https://developer.android.com/reference/android/os/Handler.html scheduler

)` `https://developer.android.com/reference/android/content/Intent.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, int)(

https://developer.android.com/reference/android/content/BroadcastReceiver.html receiver,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/IntentFilter.html filter,

https://developer.android.com/reference/java/lang/String.html broadcastPermission,

https://developer.android.com/reference/android/os/Handler.html scheduler,

int flags

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#removeStickyBroadcast(android.content.Intent)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/UserHandle.html user

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#revokeSelfPermissionsOnKill(java.util.Collection&lt;java.lang.String&gt;)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Collection.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> permissions

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#revokeUriPermission(android.net.Uri, int)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/net/Uri.html uri, int modeFlags)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#revokeUriPermission(java.lang.String, android.net.Uri, int)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html targetPackage,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/net/Uri.html uri,

int modeFlags

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendBroadcast(android.content.Intent)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendBroadcast(android.content.Intent, java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent, https://developer.android.com/reference/java/lang/String.html receiverPermission)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendBroadcast(android.content.Intent, java.lang.String, android.os.Bundle)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent,

https://developer.android.com/reference/java/lang/String.html receiverPermission,

https://developer.android.com/reference/android/os/Bundle.html options

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendBroadcastAsUser(android.content.Intent, android.os.UserHandle)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/UserHandle.html user)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/UserHandle.html user,

https://developer.android.com/reference/java/lang/String.html receiverPermission

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendOrderedBroadcast(android.content.Intent, java.lang.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent, https://developer.android.com/reference/java/lang/String.html receiverPermission)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendOrderedBroadcast(android.content.Intent, java.lang.String, android.os.Bundle)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent,

https://developer.android.com/reference/java/lang/String.html receiverPermission,

https://developer.android.com/reference/android/os/Bundle.html options

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendOrderedBroadcast(android.content.Intent, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent,

https://developer.android.com/reference/java/lang/String.html receiverPermission,

https://developer.android.com/reference/android/content/BroadcastReceiver.html resultReceiver,

https://developer.android.com/reference/android/os/Handler.html scheduler,

int initialCode,

https://developer.android.com/reference/java/lang/String.html initialData,

https://developer.android.com/reference/android/os/Bundle.html initialExtras

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendOrderedBroadcast(android.content.Intent, java.lang.String, android.os.Bundle, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent,

https://developer.android.com/reference/java/lang/String.html receiverPermission,

https://developer.android.com/reference/android/os/Bundle.html options,

https://developer.android.com/reference/android/content/BroadcastReceiver.html resultReceiver,

https://developer.android.com/reference/android/os/Handler.html scheduler,

int initialCode,

https://developer.android.com/reference/java/lang/String.html initialData,

https://developer.android.com/reference/android/os/Bundle.html initialExtras

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendOrderedBroadcast(android.content.Intent, java.lang.String, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent,

https://developer.android.com/reference/java/lang/String.html receiverPermission,

https://developer.android.com/reference/java/lang/String.html receiverAppOp,

https://developer.android.com/reference/android/content/BroadcastReceiver.html resultReceiver,

https://developer.android.com/reference/android/os/Handler.html scheduler,

int initialCode,

https://developer.android.com/reference/java/lang/String.html initialData,

https://developer.android.com/reference/android/os/Bundle.html initialExtras

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendOrderedBroadcast(android.content.Intent, int, java.lang.String, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, java.lang.String, android.os.Bundle, android.os.Bundle)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent,

int initialCode,

https://developer.android.com/reference/java/lang/String.html receiverPermission,

https://developer.android.com/reference/java/lang/String.html receiverAppOp,

https://developer.android.com/reference/android/content/BroadcastReceiver.html resultReceiver,

https://developer.android.com/reference/android/os/Handler.html scheduler,

https://developer.android.com/reference/java/lang/String.html initialData,

https://developer.android.com/reference/android/os/Bundle.html initialExtras,

https://developer.android.com/reference/android/os/Bundle.html options

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/UserHandle.html user,

https://developer.android.com/reference/java/lang/String.html receiverPermission,

https://developer.android.com/reference/android/content/BroadcastReceiver.html resultReceiver,

https://developer.android.com/reference/android/os/Handler.html scheduler,

int initialCode,

https://developer.android.com/reference/java/lang/String.html initialData,

https://developer.android.com/reference/android/os/Bundle.html initialExtras

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendStickyBroadcast(android.content.Intent)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendStickyBroadcast(android.content.Intent, android.os.Bundle)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent, https://developer.android.com/reference/android/os/Bundle.html options)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/UserHandle.html user)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendStickyOrderedBroadcast(android.content.Intent, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent,

https://developer.android.com/reference/android/content/BroadcastReceiver.html resultReceiver,

https://developer.android.com/reference/android/os/Handler.html scheduler,

int initialCode,

https://developer.android.com/reference/java/lang/String.html initialData,

https://developer.android.com/reference/android/os/Bundle.html initialExtras

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendStickyOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/UserHandle.html user,

https://developer.android.com/reference/android/content/BroadcastReceiver.html resultReceiver,

https://developer.android.com/reference/android/os/Handler.html scheduler,

int initialCode,

https://developer.android.com/reference/java/lang/String.html initialData,

https://developer.android.com/reference/android/os/Bundle.html initialExtras

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#setTheme(int)(int resid)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#setWallpaper(android.graphics.Bitmap)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/graphics/Bitmap.html bitmap)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#setWallpaper(java.io.InputStream)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/InputStream.html data)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#startActivities(android.content.Intent[])(@https://developer.android.com/reference/androidx/annotation/NonNull Intent[] intents)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#startActivities(android.content.Intent[], android.os.Bundle)(@https://developer.android.com/reference/androidx/annotation/NonNull Intent[] intents, https://developer.android.com/reference/android/os/Bundle.html options)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#startActivity(android.content.Intent)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#startActivity(android.content.Intent, android.os.Bundle)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent, https://developer.android.com/reference/android/os/Bundle.html options)` `https://developer.android.com/reference/android/content/ComponentName.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#startForegroundService(android.content.Intent)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html service)` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ComponentName.html className,

https://developer.android.com/reference/java/lang/String.html profileFile,

https://developer.android.com/reference/android/os/Bundle.html arguments

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/IntentSender.html intent,

https://developer.android.com/reference/android/content/Intent.html fillInIntent,

int flagsMask,

int flagsValues,

int extraFlags

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int, android.os.Bundle)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/IntentSender.html intent,

https://developer.android.com/reference/android/content/Intent.html fillInIntent,

int flagsMask,

int flagsValues,

int extraFlags,

https://developer.android.com/reference/android/os/Bundle.html options

)` `https://developer.android.com/reference/android/content/ComponentName.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#startService(android.content.Intent)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html service)` `boolean` `https://developer.android.com/reference/android/content/ContextWrapper.html#stopService(android.content.Intent)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html name)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#unbindService(android.content.ServiceConnection)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ServiceConnection.html conn)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#unregisterComponentCallbacks(android.content.ComponentCallbacks)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ComponentCallbacks.html callback)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#unregisterDeviceIdChangeListener(java.util.function.IntConsumer)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/function/IntConsumer.html listener)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#unregisterReceiver(android.content.BroadcastReceiver)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/BroadcastReceiver.html receiver)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#updateServiceBindings(java.util.Collection&lt;android.content.Context.UpdateBindingParams&gt;)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Collection.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.UpdateBindingParams.html> params

)` `void` `https://developer.android.com/reference/android/content/ContextWrapper.html#updateServiceGroup(android.content.ServiceConnection, int, int)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/ServiceConnection.html conn,

int group,

int importance

)` From [android.service.credentials.CredentialProviderService](https://developer.android.com/reference/android/service/credentials/CredentialProviderService.html) `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/IBinder.html` `https://developer.android.com/reference/android/service/credentials/CredentialProviderService.html#onBind(android.content.Intent)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent)` `void` `https://developer.android.com/reference/android/service/credentials/CredentialProviderService.html#onCreate()()` From [android.app.Service](https://developer.android.com/reference/android/app/Service.html) `void` `https://developer.android.com/reference/android/app/Service.html#attachBaseContext(android.content.Context)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html newBase)` `void` `https://developer.android.com/reference/android/app/Service.html#dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[])(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/FileDescriptor.html fd,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/PrintWriter.html writer,

@https://developer.android.com/reference/androidx/annotation/NonNull String[] args

)` `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/app/Application.html` `https://developer.android.com/reference/android/app/Service.html#getApplication()()` `final int` `https://developer.android.com/reference/android/app/Service.html#getForegroundServiceType()()` `void` `https://developer.android.com/reference/android/app/Service.html#onConfigurationChanged(android.content.res.Configuration)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/res/Configuration.html newConfig)` `void` `https://developer.android.com/reference/android/app/Service.html#onDestroy()()` `void` `https://developer.android.com/reference/android/app/Service.html#onLowMemory()()` `void` `https://developer.android.com/reference/android/app/Service.html#onRebind(android.content.Intent)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent)` `void` `https://developer.android.com/reference/android/app/Service.html#onStart(android.content.Intent, int)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent, int startId)` `int` `https://developer.android.com/reference/android/app/Service.html#onStartCommand(android.content.Intent, int, int)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent, int flags, int startId)` `void` `https://developer.android.com/reference/android/app/Service.html#onTaskRemoved(android.content.Intent)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html rootIntent)` `void` `https://developer.android.com/reference/android/app/Service.html#onTimeout(int)(int startId)` `void` `https://developer.android.com/reference/android/app/Service.html#onTimeout(int, int)(int startId, int fgsType)` `void` `https://developer.android.com/reference/android/app/Service.html#onTrimMemory(int)(int level)` `boolean` `https://developer.android.com/reference/android/app/Service.html#onUnbind(android.content.Intent)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html intent)` `final void` `https://developer.android.com/reference/android/app/Service.html#startForeground(int, android.app.Notification)(int id, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/app/Notification.html notification)` `final void` `https://developer.android.com/reference/android/app/Service.html#startForeground(int, android.app.Notification, int)(

int id,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/app/Notification.html notification,

int foregroundServiceType

)` `final void` `https://developer.android.com/reference/android/app/Service.html#stopForeground(int)(int notificationBehavior)` `final void` `https://developer.android.com/reference/android/app/Service.html#stopForeground(boolean)(boolean removeNotification)` `final void` `https://developer.android.com/reference/android/app/Service.html#stopSelf()()` `final void` `https://developer.android.com/reference/android/app/Service.html#stopSelf(int)(int startId)` `final boolean` `https://developer.android.com/reference/android/app/Service.html#stopSelfResult(int)(int startId)`

## Public constructors

### CredentialProviderService

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

```
public CredentialProviderService()
```

## Public methods

### onBeginCreateCredential

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

```
public final void onBeginCreateCredential(
    @NonNull BeginCreateCredentialRequest request,
    @NonNull CancellationSignal cancellationSignal,
    @NonNull OutcomeReceiver<@NonNull BeginCreateCredentialResponse, @NonNull CreateCredentialException> callback
)
```

### onBeginCreateCredentialRequest

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

```
public abstract void onBeginCreateCredentialRequest(
    @NonNull BeginCreateCredentialRequest request,
    @NonNull CancellationSignal cancellationSignal,
    @NonNull OutcomeReceiver<@NonNull BeginCreateCredentialResponse, @NonNull CreateCredentialException> callback
)
```

Called by the Android System in response to a client app calling `https://developer.android.com/reference/androidx/credentials/CredentialManager#createCredential(android.content.Context,androidx.credentials.CreateCredentialRequest)`, to create/save a credential with a credential provider installed on the device.

Credential provider services must extend this method in order to handle a `https://developer.android.com/reference/androidx/credentials/provider/BeginCreateCredentialRequest` request. Once processed, the service must call one of the `https://developer.android.com/reference/androidx/credentials/provider/CredentialProviderService#onBeginCreateCredentialRequest(androidx.credentials.provider.BeginCreateCredentialRequest,android.os.CancellationSignal,android.os.OutcomeReceiver)` methods to notify the result of the request.

This API call is referred to as the **query phase** of the original create request from the client app. In this phase, provider must process the request parameters in the `https://developer.android.com/reference/androidx/credentials/provider/BeginCreateCredentialRequest` and return a list of `https://developer.android.com/reference/androidx/credentials/provider/CreateEntry` whereby every entry represents an account/group where the user will be storing the credential. Each `https://developer.android.com/reference/androidx/credentials/provider/CreateEntry` must contain a `https://developer.android.com/reference/android/app/PendingIntent.html` that will lead the user to an activity in the credential provider's app that will complete the actual credential creation.

When user selects one of the `https://developer.android.com/reference/androidx/credentials/provider/CreateEntry`, the associated `https://developer.android.com/reference/android/app/PendingIntent.html` will be invoked and the provider will receive the complete request as part of the extras in the resulting activity. Provider must retrieve the request through `https://developer.android.com/reference/androidx/credentials/provider/PendingIntentHandler#retrieveProviderCreateCredentialRequest(android.content.Intent)`. Once the activity is complete, and the credential is created, provider must set back the response through `https://developer.android.com/reference/androidx/credentials/provider/PendingIntentHandler#setCreateCredentialResponse(android.content.Intent,androidx.credentials.CreateCredentialResponse)`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/provider/BeginCreateCredentialRequest request` | the `https://developer.android.com/reference/androidx/credentials/provider/BeginCreateCredentialRequest` to handle See `https://developer.android.com/reference/androidx/credentials/provider/BeginCreateCredentialResponse` for the response to be returned |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/CancellationSignal.html cancellationSignal` | signal for observing cancellation requests. The system will use this to notify you that the result is no longer needed and you should stop handling it in order to save your resources |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/OutcomeReceiver.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/provider/BeginCreateCredentialResponse, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/exceptions/CreateCredentialException> callback` | the callback object to be used to notify the response or error |

### onBeginGetCredential

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

```
public final void onBeginGetCredential(
    @NonNull BeginGetCredentialRequest request,
    @NonNull CancellationSignal cancellationSignal,
    @NonNull OutcomeReceiver<@NonNull BeginGetCredentialResponse, @NonNull GetCredentialException> callback
)
```

### onBeginGetCredentialRequest

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

```
public abstract void onBeginGetCredentialRequest(
    @NonNull BeginGetCredentialRequest request,
    @NonNull CancellationSignal cancellationSignal,
    @NonNull OutcomeReceiver<@NonNull BeginGetCredentialResponse, @NonNull GetCredentialException> callback
)
```

Called by the Android System in response to a client app calling `https://developer.android.com/reference/androidx/credentials/CredentialManager#getCredential(android.content.Context,androidx.credentials.GetCredentialRequest)`, to get a credential sourced from a credential provider installed on the device.

Credential provider services must extend this method in order to handle a `https://developer.android.com/reference/androidx/credentials/provider/BeginGetCredentialRequest` request. Once processed, the service must call one of the `https://developer.android.com/reference/androidx/credentials/provider/CredentialProviderService#onBeginGetCredentialRequest(androidx.credentials.provider.BeginGetCredentialRequest,android.os.CancellationSignal,android.os.OutcomeReceiver)` methods to notify the result of the request.

This API call is referred to as the **query phase** of the original get request from the client app. In this phase, provider must go over all the `https://developer.android.com/reference/android/service/credentials/BeginGetCredentialOption.html`, and add corresponding a `https://developer.android.com/reference/android/service/credentials/CredentialEntry.html` to the `https://developer.android.com/reference/androidx/credentials/provider/BeginGetCredentialResponse`. Each `https://developer.android.com/reference/android/service/credentials/CredentialEntry.html` should contain meta-data to be shown on the selector UI. In addition, each `https://developer.android.com/reference/android/service/credentials/CredentialEntry.html` must contain a `https://developer.android.com/reference/android/app/PendingIntent.html`. Optionally, providers can also add `https://developer.android.com/reference/androidx/credentials/provider/Action` entries for any non-credential related actions that they want to offer to the users e.g. opening app, managing credentials etc.

When user selects one of the `https://developer.android.com/reference/android/service/credentials/CredentialEntry.html`, **final phase** of the original client's get-request flow starts. The Android System attached the complete `https://developer.android.com/reference/androidx/credentials/provider/ProviderGetCredentialRequest` to an intent extra of the activity that is started by the pending intent. The request must be retrieved through `https://developer.android.com/reference/androidx/credentials/provider/PendingIntentHandler#retrieveProviderGetCredentialRequest(android.content.Intent)`. This final request will only contain a single `https://developer.android.com/reference/androidx/credentials/CredentialOption` that contains the parameters of the credential the user has requested. The provider service must retrieve this credential and return through `https://developer.android.com/reference/androidx/credentials/provider/PendingIntentHandler#setGetCredentialResponse(android.content.Intent,androidx.credentials.GetCredentialResponse,androidx.credentials.provider.ProviderGetCredentialRequest)`.

**Handling locked provider apps** If the provider app is locked, and the provider cannot provide any meta-data based `https://developer.android.com/reference/android/service/credentials/CredentialEntry.html`, provider must set an `https://developer.android.com/reference/androidx/credentials/provider/AuthenticationAction` on the `https://developer.android.com/reference/androidx/credentials/provider/BeginGetCredentialResponse`. The `https://developer.android.com/reference/android/app/PendingIntent.html` set on this entry must lead the user to an \>unlock activity. Once unlocked, the provider must retrieve all credentials, and set the list of `https://developer.android.com/reference/android/service/credentials/CredentialEntry.html` and the list of optional `https://developer.android.com/reference/androidx/credentials/provider/Action` as a result of the \>unlock activity through `https://developer.android.com/reference/androidx/credentials/provider/PendingIntentHandler#setBeginGetCredentialResponse(android.content.Intent,androidx.credentials.provider.BeginGetCredentialResponse)`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/provider/BeginGetCredentialRequest request` | the `https://developer.android.com/reference/androidx/credentials/provider/ProviderGetCredentialRequest` to handle See `https://developer.android.com/reference/androidx/credentials/provider/BeginGetCredentialResponse` for the response to be returned |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/CancellationSignal.html cancellationSignal` | signal for observing cancellation requests. The system will use this to notify you that the result is no longer needed and you should stop handling it in order to save your resources |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/OutcomeReceiver.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/provider/BeginGetCredentialResponse, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/exceptions/GetCredentialException> callback` | the callback object to be used to notify the response or error |

| See also |
|---|---|
| `https://developer.android.com/reference/android/service/credentials/CredentialEntry.html` | for how an entry representing a credential must be built |
| `https://developer.android.com/reference/androidx/credentials/provider/Action` | for how a non-credential related action should be built |
| `https://developer.android.com/reference/androidx/credentials/provider/AuthenticationAction` | for how an entry that navigates the user to an unlock flow can be built |

### onClearCredentialState

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

```
public final void onClearCredentialState(
    @NonNull ClearCredentialStateRequest request,
    @NonNull CancellationSignal cancellationSignal,
    @NonNull OutcomeReceiver<@NonNull Void, @NonNull ClearCredentialStateException> callback
)
```

### onClearCredentialStateRequest

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

```
public abstract void onClearCredentialStateRequest(
    @NonNull ProviderClearCredentialStateRequest request,
    @NonNull CancellationSignal cancellationSignal,
    @NonNull OutcomeReceiver<Void, @NonNull ClearCredentialException> callback
)
```

Called by the Android System in response to a client app calling `https://developer.android.com/reference/androidx/credentials/CredentialManager#clearCredentialState(androidx.credentials.ClearCredentialStateRequest)`. A client app typically calls this API on instances like sign-out when the intention is that the providers clear any state that they may have maintained for the given user.

You should invoked this api after your user signs out of your app to notify all credential providers that any stored credential session for the given app should be cleared.

An example scenario of a state that is maintained and is expected to be cleared on this call, is when an active credential session is being stored to limit sign-in options in the result of subsequent get-request calls. When a user explicitly signs out of the app, the next time, the client app may want their users to see all options and hence will call this API first to make sure credential providers can clear the state maintained previously.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/provider/ProviderClearCredentialStateRequest request` | the request for the credential provider to handle |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/CancellationSignal.html cancellationSignal` | signal for observing cancellation requests. The system will use this to notify you that the result is no longer needed and you should stop handling it in order to save your resources |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/OutcomeReceiver.html<https://developer.android.com/reference/java/lang/Void.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/exceptions/ClearCredentialException> callback` | the callback object to be used to notify the response or error |