# UpdateInfoService

Artifact: [androidx.security:security-state-provider](https://developer.android.com/jetpack/androidx/releases/security) [View Source](https://cs.android.com/search?q=file:androidx/security/state/provider/UpdateInfoService.kt+class:androidx.security.state.provider.UpdateInfoService) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/security#1.0.0)

*** ** * ** ***


```
abstract class UpdateInfoService : Service
```

<br />

|---|---|---|---|---|
| [kotlin.Any](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.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) ||
|   |   |   | ↳ | [androidx.security.state.provider.UpdateInfoService](https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService) |

Known direct subclasses [ListenableFutureUpdateInfoService](https://developer.android.com/reference/kotlin/androidx/security/state/provider/ListenableFutureUpdateInfoService)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/security/state/provider/ListenableFutureUpdateInfoService` | `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html`-based compatibility wrapper around `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService`'s suspending APIs. |

*** ** * ** ***

Base class for implementing the AndroidX Security State Update Provider service.

This abstract class provides the foundational implementation for the `IUpdateInfoService` AIDL interface. It manages the complexity of serving security update information to client applications, enforcing a consistent contract for data freshness, resource usage, and observability.

### Responsibilities

- **Session Management:** Implements a Factory pattern to create secure, stateful sessions (`IUpdateInfoSession`) for each connecting client.

- **Identity Verification:** Validates client-provided package names against their Kernel-level UIDs to prevent Intent spoofing and guarantee secure attribution. To successfully perform this validation, the host application must have broad package visibility (e.g., via the `QUERY_ALL_PACKAGES` permission or by running as the system user).

- **Concurrency Control:** Implements Double-Checked Locking to prevent "thundering herd" scenarios where multiple clients trigger parallel network requests.

- **Rate Limiting:** Enforces a default throttling policy (e.g., maximum one check per hour) to protect backend infrastructure.

- **Caching:** Automatically persists fetched results and freshness metadata to local storage.

### Monitoring \& Telemetry

To support high-scale hosts that require strict monitoring, this class provides a comprehensive set of observability hooks. Hosts can override these methods to integrate with their own logging infrastructure:

- `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onRequestCompleted(androidx.security.state.provider.UpdateCheckTelemetry)`: Report granular performance metrics (latency, lock contention) and usage.

- `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onClientConnected(kotlin.String,kotlin.Int)` / `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onClientDisconnected(kotlin.String,kotlin.Int)`: Track authenticated session lifecycles and adoption.

- `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onFetchFailed(java.lang.Exception)`: Report backend errors and exceptions.

- `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#dump(java.io.FileDescriptor,java.io.PrintWriter,kotlin.Array)`: Debug internal state via `adb shell dumpsys`.

### Host Implementation

Host applications (such as the System Updater, Google Play Store, or OEM-specific updaters) written in Kotlin should extend this class and implement `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#fetchUpdates()` to provide the actual network logic. Java consumers should instead extend `https://developer.android.com/reference/kotlin/androidx/security/state/provider/ListenableFutureUpdateInfoService`.

### Manifest Declaration

To expose this service, you must declare it in your `AndroidManifest.xml` with the `exported="true"` attribute and an intent-filter for the `UPDATE_INFO_SERVICE` action:

```kotlin
<service
    android:name=".MyUpdateInfoService"
    android:exported="true">
    <intent-filter>
        <action android:name="androidx.security.state.provider.UPDATE_INFO_SERVICE" />
    </intent-filter>
</service>
```

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#UpdateInfoService()()` |

| ### Public functions |
|---|---|
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#dump(java.io.FileDescriptor,java.io.PrintWriter,kotlin.Array)(fd: https://developer.android.com/reference/java/io/FileDescriptor.html?, writer: https://developer.android.com/reference/java/io/PrintWriter.html?, args: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html>?)` Dumps the state of the service for debugging (e.g. `adb shell dumpsys activity service`). |
| `final https://developer.android.com/reference/android/os/IBinder.html?` | `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onBind(android.content.Intent)(intent: https://developer.android.com/reference/android/content/Intent.html?)` Called by the system when a client binds to the service. |
| `final https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onUnbind(android.content.Intent)(intent: https://developer.android.com/reference/android/content/Intent.html?)` Called by the system when all clients have disconnected from the service's factory interface. |

| ### Protected functions |
|---|---|
| `abstract suspend https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/security/state/UpdateInfo>` | `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#fetchUpdates()()` Performs the actual network request to fetch fresh updates from the backend. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#getCallerUid()()` Retrieves the UID of the calling process. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onClientConnected(kotlin.String,kotlin.Int)(packageName: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, callerUid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Called when a client successfully establishes a session with the update provider. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onClientDisconnected(kotlin.String,kotlin.Int)(packageName: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, callerUid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Called when a client explicitly closes its session or its process terminates unexpectedly. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onFetchFailed(java.lang.Exception)(e: https://developer.android.com/reference/java/lang/Exception.html)` Callback for handling exceptions that occur during the update check process. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onRequestCompleted(androidx.security.state.provider.UpdateCheckTelemetry)(telemetry: https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateCheckTelemetry)` Called when a request completes. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#shouldFetchUpdates()()` Determines if the local cache is stale and a refresh should be attempted. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#shouldThrottle()()` Checks if the update check operation should be throttled. |

### Inherited functions

From [android.content.Context](https://developer.android.com/reference/android/content/Context.html) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `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)(
service: https://developer.android.com/reference/android/content/Intent.html,
flags: https://developer.android.com/reference/android/content/Context.BindServiceFlags.html,
instanceName: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html,
executor: https://developer.android.com/reference/java/util/concurrent/Executor.html,
conn: https://developer.android.com/reference/android/content/ServiceConnection.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/content/Context.html#getColor(int)(id: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://developer.android.com/reference/android/content/res/ColorStateList.html` `https://developer.android.com/reference/android/content/Context.html#getColorStateList(int)(id: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://developer.android.com/reference/android/graphics/drawable/Drawable.html?` `https://developer.android.com/reference/android/content/Context.html#getDrawable(int)(id: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` `https://developer.android.com/reference/android/content/Context.html#getString(int)(resId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` `https://developer.android.com/reference/android/content/Context.html#getString(int, java.lang.Object...)(resId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, vararg formatArgs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html)` `T` `<T : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html> https://developer.android.com/reference/android/content/Context.html#getSystemService(java.lang.Class&lt;T&gt;)(serviceClass: https://developer.android.com/reference/java/lang/Class.html<T>)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-char-sequence/index.html` `https://developer.android.com/reference/android/content/Context.html#getText(int)(resId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://developer.android.com/reference/android/content/res/TypedArray.html` `https://developer.android.com/reference/android/content/Context.html#obtainStyledAttributes(int[])(attrs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int-array/index.html)` `https://developer.android.com/reference/android/content/res/TypedArray.html` `https://developer.android.com/reference/android/content/Context.html#obtainStyledAttributes(int, int[])(resid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, attrs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int-array/index.html)` `https://developer.android.com/reference/android/content/res/TypedArray.html` `https://developer.android.com/reference/android/content/Context.html#obtainStyledAttributes(android.util.AttributeSet, int[])(set: https://developer.android.com/reference/android/util/AttributeSet.html?, attrs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int-array/index.html)` `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)(
set: https://developer.android.com/reference/android/util/AttributeSet.html?,
attrs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int-array/index.html,
defStyleAttr: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
defStyleRes: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/Context.html#revokeSelfPermissionOnKill(java.lang.String)(permName: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/Context.html#sendBroadcastWithMultiplePermissions(android.content.Intent, java.lang.String[])(
intent: https://developer.android.com/reference/android/content/Intent.html,
receiverPermissions: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html>
)` From [android.content.ContextWrapper](https://developer.android.com/reference/android/content/ContextWrapper.html) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#bindIsolatedService(android.content.Intent, int, java.lang.String, java.util.concurrent.Executor, android.content.ServiceConnection)(
service: https://developer.android.com/reference/android/content/Intent.html,
flags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
instanceName: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html,
executor: https://developer.android.com/reference/java/util/concurrent/Executor.html,
conn: https://developer.android.com/reference/android/content/ServiceConnection.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#bindService(android.content.Intent, android.content.ServiceConnection, android.content.Context.BindServiceFlags)(
service: https://developer.android.com/reference/android/content/Intent.html,
conn: https://developer.android.com/reference/android/content/ServiceConnection.html,
flags: https://developer.android.com/reference/android/content/Context.BindServiceFlags.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#bindService(android.content.Intent, android.content.ServiceConnection, int)(service: https://developer.android.com/reference/android/content/Intent.html, conn: https://developer.android.com/reference/android/content/ServiceConnection.html, flags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#bindService(android.content.Intent, android.content.Context.BindServiceFlags, java.util.concurrent.Executor, android.content.ServiceConnection)(
service: https://developer.android.com/reference/android/content/Intent.html,
flags: https://developer.android.com/reference/android/content/Context.BindServiceFlags.html,
executor: https://developer.android.com/reference/java/util/concurrent/Executor.html,
conn: https://developer.android.com/reference/android/content/ServiceConnection.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#bindService(android.content.Intent, int, java.util.concurrent.Executor, android.content.ServiceConnection)(
service: https://developer.android.com/reference/android/content/Intent.html,
flags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
executor: https://developer.android.com/reference/java/util/concurrent/Executor.html,
conn: https://developer.android.com/reference/android/content/ServiceConnection.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#bindServiceAsUser(android.content.Intent, android.content.ServiceConnection, android.content.Context.BindServiceFlags, android.os.UserHandle)(
service: https://developer.android.com/reference/android/content/Intent.html,
conn: https://developer.android.com/reference/android/content/ServiceConnection.html,
flags: https://developer.android.com/reference/android/content/Context.BindServiceFlags.html,
user: https://developer.android.com/reference/android/os/UserHandle.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#bindServiceAsUser(android.content.Intent, android.content.ServiceConnection, int, android.os.UserHandle)(
service: https://developer.android.com/reference/android/content/Intent.html,
conn: https://developer.android.com/reference/android/content/ServiceConnection.html,
flags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
user: https://developer.android.com/reference/android/os/UserHandle.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkCallingOrSelfPermission(java.lang.String)(permission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkCallingOrSelfUriPermission(android.net.Uri, int)(uri: https://developer.android.com/reference/android/net/Uri.html, modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int-array/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkCallingOrSelfUriPermissions(java.util.List&lt;android.net.Uri&gt;, int)(uris: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html<https://developer.android.com/reference/android/net/Uri.html>, modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkCallingPermission(java.lang.String)(permission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkCallingUriPermission(android.net.Uri, int)(uri: https://developer.android.com/reference/android/net/Uri.html, modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int-array/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkCallingUriPermissions(java.util.List&lt;android.net.Uri&gt;, int)(uris: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html<https://developer.android.com/reference/android/net/Uri.html>, modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkContentUriPermissionFull(android.net.Uri, int, int, int)(uri: https://developer.android.com/reference/android/net/Uri.html, pid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, uid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkPermission(java.lang.String, int, int)(permission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, pid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, uid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkSelfPermission(java.lang.String)(permission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkUriPermission(android.net.Uri, int, int, int)(uri: https://developer.android.com/reference/android/net/Uri.html, pid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, uid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int)(
uri: https://developer.android.com/reference/android/net/Uri.html?,
readPermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
writePermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
pid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
uid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int-array/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#checkUriPermissions(java.util.List&lt;android.net.Uri&gt;, int, int, int)(
uris: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html<https://developer.android.com/reference/android/net/Uri.html>,
pid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
uid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#clearWallpaper()()` `https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createAttributionContext(java.lang.String)(attributionTag: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?)` `https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createConfigurationContext(android.content.res.Configuration)(overrideConfiguration: https://developer.android.com/reference/android/content/res/Configuration.html)` `https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createContext(android.content.ContextParams)(contextParams: https://developer.android.com/reference/android/content/ContextParams.html)` `https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createContextForSplit(java.lang.String)(splitName: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createDeviceContext(int)(deviceId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createDeviceProtectedStorageContext()()` `https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createDisplayContext(android.view.Display)(display: https://developer.android.com/reference/android/view/Display.html)` `https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createPackageContext(java.lang.String, int)(packageName: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, flags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#createWindowContext(int, android.os.Bundle)(type: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, options: https://developer.android.com/reference/android/os/Bundle.html?)` `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)(display: https://developer.android.com/reference/android/view/Display.html, type: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, options: https://developer.android.com/reference/android/os/Bundle.html?)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html>` `https://developer.android.com/reference/android/content/ContextWrapper.html#databaseList()()` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#deleteDatabase(java.lang.String)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#deleteFile(java.lang.String)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#deleteSharedPreferences(java.lang.String)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#enforceCallingOrSelfPermission(java.lang.String, java.lang.String)(permission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, message: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#enforceCallingOrSelfUriPermission(android.net.Uri, int, java.lang.String)(
uri: https://developer.android.com/reference/android/net/Uri.html,
modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
message: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#enforceCallingPermission(java.lang.String, java.lang.String)(permission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, message: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#enforceCallingUriPermission(android.net.Uri, int, java.lang.String)(uri: https://developer.android.com/reference/android/net/Uri.html, modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, message: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#enforcePermission(java.lang.String, int, int, java.lang.String)(permission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, pid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, uid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, message: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#enforceUriPermission(android.net.Uri, int, int, int, java.lang.String)(
uri: https://developer.android.com/reference/android/net/Uri.html,
pid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
uid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
message: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `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)(
uri: https://developer.android.com/reference/android/net/Uri.html?,
readPermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
writePermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
pid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
uid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
message: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html>` `https://developer.android.com/reference/android/content/ContextWrapper.html#fileList()()` `https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getDatabasePath(java.lang.String)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getDir(java.lang.String, int)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, mode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://developer.android.com/reference/java/io/File.html?` `https://developer.android.com/reference/android/content/ContextWrapper.html#getExternalFilesDir(java.lang.String)(type: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/java/io/File.html>` `https://developer.android.com/reference/android/content/ContextWrapper.html#getExternalFilesDirs(java.lang.String)(type: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getFileStreamPath(java.lang.String)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://developer.android.com/reference/android/content/SharedPreferences.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getSharedPreferences(java.lang.String, int)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, mode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#getSystemService(java.lang.String)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?` `https://developer.android.com/reference/android/content/ContextWrapper.html#getSystemServiceName(java.lang.Class&lt;?&gt;)(serviceClass: https://developer.android.com/reference/java/lang/Class.html<*>)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#grantUriPermission(java.lang.String, android.net.Uri, int)(toPackage: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, uri: https://developer.android.com/reference/android/net/Uri.html, modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#moveDatabaseFrom(android.content.Context, java.lang.String)(sourceContext: https://developer.android.com/reference/android/content/Context.html, name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#moveSharedPreferencesFrom(android.content.Context, java.lang.String)(sourceContext: https://developer.android.com/reference/android/content/Context.html, name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://developer.android.com/reference/java/io/FileInputStream.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#openFileInput(java.lang.String)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` `https://developer.android.com/reference/java/io/FileOutputStream.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#openFileOutput(java.lang.String, int)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, mode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `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)(
name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html,
mode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
factory: https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory.html
)` `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)(
name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html,
mode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
factory: https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory.html,
errorHandler: https://developer.android.com/reference/android/database/DatabaseErrorHandler.html?
)` `https://developer.android.com/reference/android/graphics/drawable/Drawable.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#peekWallpaper()()` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#rebindService(android.content.ServiceConnection, android.content.Context.BindServiceFlags)(conn: https://developer.android.com/reference/android/content/ServiceConnection.html, flags: https://developer.android.com/reference/android/content/Context.BindServiceFlags.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#registerComponentCallbacks(android.content.ComponentCallbacks)(callback: https://developer.android.com/reference/android/content/ComponentCallbacks.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#registerDeviceIdChangeListener(java.util.concurrent.Executor, java.util.function.IntConsumer)(executor: https://developer.android.com/reference/java/util/concurrent/Executor.html, listener: https://developer.android.com/reference/java/util/function/IntConsumer.html)` `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)(receiver: https://developer.android.com/reference/android/content/BroadcastReceiver.html?, filter: https://developer.android.com/reference/android/content/IntentFilter.html)` `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)(
receiver: https://developer.android.com/reference/android/content/BroadcastReceiver.html?,
filter: https://developer.android.com/reference/android/content/IntentFilter.html,
flags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html
)` `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)(
receiver: https://developer.android.com/reference/android/content/BroadcastReceiver.html?,
filter: https://developer.android.com/reference/android/content/IntentFilter.html,
broadcastPermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
scheduler: https://developer.android.com/reference/android/os/Handler.html?
)` `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)(
receiver: https://developer.android.com/reference/android/content/BroadcastReceiver.html?,
filter: https://developer.android.com/reference/android/content/IntentFilter.html,
broadcastPermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
scheduler: https://developer.android.com/reference/android/os/Handler.html?,
flags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#removeStickyBroadcast(android.content.Intent)(intent: https://developer.android.com/reference/android/content/Intent.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle)(intent: https://developer.android.com/reference/android/content/Intent.html, user: https://developer.android.com/reference/android/os/UserHandle.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#revokeSelfPermissionsOnKill(java.util.Collection&lt;java.lang.String&gt;)(permissions: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-collection/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html>)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#revokeUriPermission(android.net.Uri, int)(uri: https://developer.android.com/reference/android/net/Uri.html, modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#revokeUriPermission(java.lang.String, android.net.Uri, int)(targetPackage: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, uri: https://developer.android.com/reference/android/net/Uri.html, modeFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendBroadcast(android.content.Intent)(intent: https://developer.android.com/reference/android/content/Intent.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendBroadcast(android.content.Intent, java.lang.String)(intent: https://developer.android.com/reference/android/content/Intent.html, receiverPermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendBroadcast(android.content.Intent, java.lang.String, android.os.Bundle)(intent: https://developer.android.com/reference/android/content/Intent.html, receiverPermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?, options: https://developer.android.com/reference/android/os/Bundle.html?)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendBroadcastAsUser(android.content.Intent, android.os.UserHandle)(intent: https://developer.android.com/reference/android/content/Intent.html, user: https://developer.android.com/reference/android/os/UserHandle.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String)(
intent: https://developer.android.com/reference/android/content/Intent.html,
user: https://developer.android.com/reference/android/os/UserHandle.html,
receiverPermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendOrderedBroadcast(android.content.Intent, java.lang.String)(intent: https://developer.android.com/reference/android/content/Intent.html, receiverPermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendOrderedBroadcast(android.content.Intent, java.lang.String, android.os.Bundle)(
intent: https://developer.android.com/reference/android/content/Intent.html,
receiverPermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
options: https://developer.android.com/reference/android/os/Bundle.html?
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `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)(
intent: https://developer.android.com/reference/android/content/Intent.html,
receiverPermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
resultReceiver: https://developer.android.com/reference/android/content/BroadcastReceiver.html?,
scheduler: https://developer.android.com/reference/android/os/Handler.html?,
initialCode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
initialData: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
initialExtras: https://developer.android.com/reference/android/os/Bundle.html?
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `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)(
intent: https://developer.android.com/reference/android/content/Intent.html,
receiverPermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
options: https://developer.android.com/reference/android/os/Bundle.html?,
resultReceiver: https://developer.android.com/reference/android/content/BroadcastReceiver.html?,
scheduler: https://developer.android.com/reference/android/os/Handler.html?,
initialCode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
initialData: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
initialExtras: https://developer.android.com/reference/android/os/Bundle.html?
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `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)(
intent: https://developer.android.com/reference/android/content/Intent.html,
receiverPermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
receiverAppOp: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
resultReceiver: https://developer.android.com/reference/android/content/BroadcastReceiver.html?,
scheduler: https://developer.android.com/reference/android/os/Handler.html?,
initialCode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
initialData: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
initialExtras: https://developer.android.com/reference/android/os/Bundle.html?
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `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)(
intent: https://developer.android.com/reference/android/content/Intent.html,
initialCode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
receiverPermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
receiverAppOp: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
resultReceiver: https://developer.android.com/reference/android/content/BroadcastReceiver.html?,
scheduler: https://developer.android.com/reference/android/os/Handler.html?,
initialData: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
initialExtras: https://developer.android.com/reference/android/os/Bundle.html?,
options: https://developer.android.com/reference/android/os/Bundle.html?
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `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)(
intent: https://developer.android.com/reference/android/content/Intent.html,
user: https://developer.android.com/reference/android/os/UserHandle.html,
receiverPermission: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
resultReceiver: https://developer.android.com/reference/android/content/BroadcastReceiver.html?,
scheduler: https://developer.android.com/reference/android/os/Handler.html?,
initialCode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
initialData: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
initialExtras: https://developer.android.com/reference/android/os/Bundle.html?
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendStickyBroadcast(android.content.Intent)(intent: https://developer.android.com/reference/android/content/Intent.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendStickyBroadcast(android.content.Intent, android.os.Bundle)(intent: https://developer.android.com/reference/android/content/Intent.html, options: https://developer.android.com/reference/android/os/Bundle.html?)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#sendStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle)(intent: https://developer.android.com/reference/android/content/Intent.html, user: https://developer.android.com/reference/android/os/UserHandle.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `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)(
intent: https://developer.android.com/reference/android/content/Intent.html,
resultReceiver: https://developer.android.com/reference/android/content/BroadcastReceiver.html?,
scheduler: https://developer.android.com/reference/android/os/Handler.html?,
initialCode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
initialData: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
initialExtras: https://developer.android.com/reference/android/os/Bundle.html?
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `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)(
intent: https://developer.android.com/reference/android/content/Intent.html,
user: https://developer.android.com/reference/android/os/UserHandle.html,
resultReceiver: https://developer.android.com/reference/android/content/BroadcastReceiver.html?,
scheduler: https://developer.android.com/reference/android/os/Handler.html?,
initialCode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
initialData: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
initialExtras: https://developer.android.com/reference/android/os/Bundle.html?
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#setTheme(int)(resid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#setWallpaper(android.graphics.Bitmap)(bitmap: https://developer.android.com/reference/android/graphics/Bitmap.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#setWallpaper(java.io.InputStream)(data: https://developer.android.com/reference/java/io/InputStream.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#startActivities(android.content.Intent[])(intents: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/android/content/Intent.html>)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#startActivities(android.content.Intent[], android.os.Bundle)(intents: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/android/content/Intent.html>, options: https://developer.android.com/reference/android/os/Bundle.html?)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#startActivity(android.content.Intent)(intent: https://developer.android.com/reference/android/content/Intent.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#startActivity(android.content.Intent, android.os.Bundle)(intent: https://developer.android.com/reference/android/content/Intent.html, options: https://developer.android.com/reference/android/os/Bundle.html?)` `https://developer.android.com/reference/android/content/ComponentName.html?` `https://developer.android.com/reference/android/content/ContextWrapper.html#startForegroundService(android.content.Intent)(service: https://developer.android.com/reference/android/content/Intent.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle)(
className: https://developer.android.com/reference/android/content/ComponentName.html,
profileFile: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?,
arguments: https://developer.android.com/reference/android/os/Bundle.html?
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int)(
intent: https://developer.android.com/reference/android/content/IntentSender.html,
fillInIntent: https://developer.android.com/reference/android/content/Intent.html?,
flagsMask: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
flagsValues: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
extraFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int, android.os.Bundle)(
intent: https://developer.android.com/reference/android/content/IntentSender.html,
fillInIntent: https://developer.android.com/reference/android/content/Intent.html?,
flagsMask: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
flagsValues: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
extraFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
options: https://developer.android.com/reference/android/os/Bundle.html?
)` `https://developer.android.com/reference/android/content/ComponentName.html?` `https://developer.android.com/reference/android/content/ContextWrapper.html#startService(android.content.Intent)(service: https://developer.android.com/reference/android/content/Intent.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#stopService(android.content.Intent)(name: https://developer.android.com/reference/android/content/Intent.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#unbindService(android.content.ServiceConnection)(conn: https://developer.android.com/reference/android/content/ServiceConnection.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#unregisterComponentCallbacks(android.content.ComponentCallbacks)(callback: https://developer.android.com/reference/android/content/ComponentCallbacks.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#unregisterDeviceIdChangeListener(java.util.function.IntConsumer)(listener: https://developer.android.com/reference/java/util/function/IntConsumer.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#unregisterReceiver(android.content.BroadcastReceiver)(receiver: https://developer.android.com/reference/android/content/BroadcastReceiver.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#updateServiceBindings(java.util.Collection&lt;android.content.Context.UpdateBindingParams&gt;)(
params: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-collection/index.html<https://developer.android.com/reference/android/content/Context.UpdateBindingParams.html>
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#updateServiceGroup(android.content.ServiceConnection, int, int)(conn: https://developer.android.com/reference/android/content/ServiceConnection.html, group: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, importance: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` From [android.app.Service](https://developer.android.com/reference/android/app/Service.html) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#attachBaseContext(android.content.Context)(newBase: https://developer.android.com/reference/android/content/Context.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#onConfigurationChanged(android.content.res.Configuration)(newConfig: https://developer.android.com/reference/android/content/res/Configuration.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#onCreate()()` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#onDestroy()()` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#onLowMemory()()` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#onRebind(android.content.Intent)(intent: https://developer.android.com/reference/android/content/Intent.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#onStart(android.content.Intent, int)(intent: https://developer.android.com/reference/android/content/Intent.html, startId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/app/Service.html#onStartCommand(android.content.Intent, int, int)(intent: https://developer.android.com/reference/android/content/Intent.html, flags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, startId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#onTaskRemoved(android.content.Intent)(rootIntent: https://developer.android.com/reference/android/content/Intent.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#onTimeout(int)(startId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#onTimeout(int, int)(startId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, fgsType: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#onTrimMemory(int)(level: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#startForeground(int, android.app.Notification)(id: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, notification: https://developer.android.com/reference/android/app/Notification.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#startForeground(int, android.app.Notification, int)(
id: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
notification: https://developer.android.com/reference/android/app/Notification.html,
foregroundServiceType: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html
)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#stopForeground(int)(notificationBehavior: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#stopForeground(boolean)(removeNotification: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#stopSelf()()` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/android/app/Service.html#stopSelf(int)(startId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/app/Service.html#stopSelfResult(int)(startId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)`

### Inherited properties

From [android.content.Context](https://developer.android.com/reference/android/content/Context.html) `open https://developer.android.com/reference/android/content/Context.BindServiceFlags.html` `https://developer.android.com/reference/android/content/Context.html#updateableFlags` From [android.content.ContextWrapper](https://developer.android.com/reference/android/content/ContextWrapper.html) `open https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#applicationContext` `open https://developer.android.com/reference/android/content/pm/ApplicationInfo.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#applicationInfo` `open https://developer.android.com/reference/android/content/res/AssetManager.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#assets` `open https://developer.android.com/reference/android/content/AttributionSource.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#attributionSource` `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?` `https://developer.android.com/reference/android/content/ContextWrapper.html#attributionTag` `open https://developer.android.com/reference/android/content/Context.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#baseContext` `open https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#cacheDir` `open https://developer.android.com/reference/java/lang/ClassLoader.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#classLoader` `open https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#codeCacheDir` `open https://developer.android.com/reference/android/content/ContentResolver.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#contentResolver` `open https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#dataDir` `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#deviceId` `open https://developer.android.com/reference/android/view/Display.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#display` `open https://developer.android.com/reference/java/io/File.html?` `https://developer.android.com/reference/android/content/ContextWrapper.html#externalCacheDir` `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/java/io/File.html>` `https://developer.android.com/reference/android/content/ContextWrapper.html#externalCacheDirs` `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/java/io/File.html>` `https://developer.android.com/reference/android/content/ContextWrapper.html#externalMediaDirs` `open https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#filesDir` `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#isDeviceProtectedStorage` `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#isRestricted` `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#isUiContext` `open https://developer.android.com/reference/java/util/concurrent/Executor.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#mainExecutor` `open https://developer.android.com/reference/android/os/Looper.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#mainLooper` `open https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#noBackupFilesDir` `open https://developer.android.com/reference/java/io/File.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#obbDir` `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/java/io/File.html>` `https://developer.android.com/reference/android/content/ContextWrapper.html#obbDirs` `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#opPackageName` `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#packageCodePath` `open https://developer.android.com/reference/android/content/pm/PackageManager.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#packageManager` `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#packageName` `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#packageResourcePath` `open https://developer.android.com/reference/android/content/ContextParams.html?` `https://developer.android.com/reference/android/content/ContextWrapper.html#params` `open https://developer.android.com/reference/android/content/res/Resources.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#resources` `open https://developer.android.com/reference/android/content/res/Resources.Theme.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#theme` `open https://developer.android.com/reference/android/graphics/drawable/Drawable.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#wallpaper`

**This property is deprecated.** Deprecated in Java
`open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#wallpaperDesiredMinimumHeight`

**This property is deprecated.** Deprecated in Java
`open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/content/ContextWrapper.html#wallpaperDesiredMinimumWidth`

**This property is deprecated.** Deprecated in Java
From [android.app.Service](https://developer.android.com/reference/android/app/Service.html) `https://developer.android.com/reference/android/app/Application.html` `https://developer.android.com/reference/android/app/Service.html#application` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/android/app/Service.html#foregroundServiceType`

## Public constructors

### UpdateInfoService

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

```
UpdateInfoService()
```

## Public functions

### dump

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

```
open fun dump(fd: FileDescriptor?, writer: PrintWriter?, args: Array<String>?): Unit
```

Dumps the state of the service for debugging (e.g. `adb shell dumpsys activity service`).

This implementation provides a snapshot of the internal state, including:

- **Active Request Count:** To detect stuck threads or high concurrency.

- **Global Last Check Time:** The timestamp of the last successful service-wide sync (Service Health).

- **Throttling Status:** Whether the rate limiter is currently blocking network requests.

- **Cached Updates:** A complete list of stored updates with detailed metadata (Component, SPL, Provider, Published Date, Last Checked Time).

### onBind

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

```
final fun onBind(intent: Intent?): IBinder?
```

Called by the system when a client binds to the service.

This method verifies that the Intent action matches the expected contract (`https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService.Companion#ACTION_BIND()`). If the action is missing or incorrect, the binding is rejected to ensure the service is not exposed unintentionally.

Upon successful verification, this method returns a factory Binder (`https://developer.android.com/reference/kotlin/androidx/security/state/IUpdateInfoService`) that allows the client to establish a secure, authenticated session.

| Parameters |
|---|---|
| `intent: https://developer.android.com/reference/android/content/Intent.html?` | The Intent that was used to bind to this service. |

| Returns |
|---|---|
| `https://developer.android.com/reference/android/os/IBinder.html?` | The `https://developer.android.com/reference/kotlin/androidx/security/state/IUpdateInfoService` factory interface, or `null` if the Intent action is invalid. |

### onUnbind

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

```
final fun onUnbind(intent: Intent?): Boolean
```

Called by the system when all clients have disconnected from the service's factory interface.

This method is marked `final` to enforce the library's lifecycle contract. It returns `false`, which forces the Android system to call `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onBind(android.content.Intent)` for any future connections. This simplifies the service's lifecycle management by ensuring we never need to handle the `https://developer.android.com/reference/android/app/Service.html#onRebind(android.content.Intent)` edge case.

**Lifecycle Note:** Individual client session disconnections and telemetry are tracked when the client calls `https://developer.android.com/reference/kotlin/androidx/security/state/IUpdateInfoSession#close()` (which triggers `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onClientDisconnected(kotlin.String,kotlin.Int)`), not within this system-level callback.

| Parameters |
|---|---|
| `intent: https://developer.android.com/reference/android/content/Intent.html?` | The Intent that was used to bind to this service. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `false` to ensure `onRebind` is not called. |

## Protected functions

### fetchUpdates

```
protected abstract suspend fun fetchUpdates(): List<UpdateInfo>
```

Performs the actual network request to fetch fresh updates from the backend.

**Template Method:** This method is implemented by the host application (e.g., the System Updater) and invoked by the `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService` base class on a background thread. The base class handles concurrency, caching, and rate-limiting.

**Preconditions:** This method is only called if `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#shouldFetchUpdates()` returns `true` and `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#shouldThrottle()` returns `false` (the rate limiter allows the request).

**Error Handling:** If this method throws an exception (e.g., due to a network timeout or server error), the base class will catch it, invoke `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onFetchFailed(java.lang.Exception)` for telemetry logging, and gracefully return the currently cached data to the client.

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/security/state/UpdateInfo>` | A list of `https://developer.android.com/reference/kotlin/androidx/security/state/UpdateInfo` objects currently available for the device. |

### getCallerUid

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

```
protected open fun getCallerUid(): Int
```

Retrieves the UID of the calling process.

The default implementation delegates to `https://developer.android.com/reference/android/os/Binder.html#getCallingUid()`. Host implementations using a proxy or broker architecture should override this to return the logical client UID instead of the broker's UID, ensuring correct attribution.

### onClientConnected

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

```
protected open fun onClientConnected(packageName: String, callerUid: Int): Unit
```

Called when a client successfully establishes a session with the update provider.

This method is invoked when a client calls `https://developer.android.com/reference/kotlin/androidx/security/state/IUpdateInfoService#openSession(java.lang.String,android.os.IBinder)` and passes the identity validation checks.

**Usage:** Override this method to log connection metrics (e.g., "Session Started") or track adoption trends based on the client package name.

**Client Identity \& Security:** The `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onClientConnected(kotlin.String,kotlin.Int)` provided to this hook is strictly validated against the Kernel-verified `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onClientConnected(kotlin.String,kotlin.Int)` by the Android system. This guarantees that the identity is authentic and cannot be spoofed.

**Package Visibility:** The host application must have package visibility (e.g., via the `QUERY_ALL_PACKAGES` permission) to verify the client's package name. If the host cannot verify the package name, the connection will be rejected with a `https://developer.android.com/reference/java/lang/SecurityException.html` before this hook is ever called.

| Parameters |
|---|---|
| `packageName: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` | The explicitly verified package name of the client application. |
| `callerUid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The Kernel-verified Linux UID of the client process. |

### onClientDisconnected

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

```
protected open fun onClientDisconnected(packageName: String, callerUid: Int): Unit
```

Called when a client explicitly closes its session or its process terminates unexpectedly.

This method is invoked when the client calls `https://developer.android.com/reference/kotlin/androidx/security/state/IUpdateInfoSession#close()` or when the Android system detects that the process hosting the client has died (via `https://developer.android.com/reference/android/os/IBinder.DeathRecipient.html`).

**Usage:** Override this method to log session ends (e.g., "Session Ended") to calculate session duration when paired with `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onClientConnected(kotlin.String,kotlin.Int)`. You can also use this to perform per-client resource cleanup.

| Parameters |
|---|---|
| `packageName: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` | The explicitly verified package name of the client application. |
| `callerUid: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The Kernel-verified Linux UID of the client process. |

### onFetchFailed

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

```
protected open fun onFetchFailed(e: Exception): Unit
```

Callback for handling exceptions that occur during the update check process.

**Template Method:** The `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService` base class executes the update check logic and catches all unhandled exceptions to prevent the service from crashing. When an exception is caught, the base class gracefully falls back to returning the currently cached data to the client, and invokes this method.

This method will be triggered if an exception occurs during any step of the lifecycle, including:

- Determining cache freshness (e.g., inside `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#shouldFetchUpdates()`).

- Evaluating rate limits (e.g., inside `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#shouldThrottle()`).

- Fetching data from the backend (e.g., inside `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#fetchUpdates()`).

- Persisting the fetched results or metadata to local storage.

The default implementation logs the error to Logcat. Hosts can override this method to report failures to their own telemetry or crash reporting systems.

| Parameters |
|---|---|
| `e: https://developer.android.com/reference/java/lang/Exception.html` | The exception caught by the base class during the operation. |

### onRequestCompleted

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

```
protected open fun onRequestCompleted(telemetry: UpdateCheckTelemetry): Unit
```

Called when a request completes. Override this to log telemetry.

This hook is called for **every** request to `listAvailableUpdates`, regardless of whether it succeeded, failed, was throttled, or was served from the cache.

**Usage:** Use this hook to log granular performance metrics (latency histograms) and resource usage.

**Attribution:** The `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#onRequestCompleted(androidx.security.state.provider.UpdateCheckTelemetry)` object contains the `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateCheckTelemetry#callerUid()`, which is the Kernel-verified UID of the calling process. This is the authoritative source for attributing load (CPU/Network/Lock Contention) to specific client applications.

| Parameters |
|---|---|
| `telemetry: https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateCheckTelemetry` | The `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateCheckTelemetry` containing metrics and outcomes. |

### shouldFetchUpdates

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

```
protected open fun shouldFetchUpdates(): Boolean
```

Determines if the local cache is stale and a refresh should be attempted.

The default implementation returns `true` if the data is older than 1 hour. Hosts can override this to implement custom caching policies (e.g., 4 hours, 24 hours).

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `true` if a network fetch should be attempted. |

### shouldThrottle

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

```
protected open fun shouldThrottle(): Boolean
```

Checks if the update check operation should be throttled.

**Default Behavior:** The default implementation delegates to an internal rate limiter backed by `SharedPreferences`. This enforces a standard minimum interval (e.g., 1 hour) between network requests to protect backend infrastructure. The rate limiting state persists across application restarts.

**Host Customization:** Hosts can override this method to inject custom rate-limiting logic, such as blocking background checks when the device is on a metered network or has low battery.

**Graceful Degradation:** If this method returns `true`, the base class skips calling `https://developer.android.com/reference/kotlin/androidx/security/state/provider/UpdateInfoService#fetchUpdates()` and gracefully returns the currently cached data to the client. Because the client receives the cached state along with its original `lastCheckTimeMillis`, the client is not expected to manage complex backoff or retry loops.

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `true` if the network request should be blocked (throttled). |