Added in [API level 21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Ctors](https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#pubctors) \| [Methods](https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#inhmethods)

# LauncherApps.Callback

*** ** * ** ***


`
public
static

abstract
class
LauncherApps.Callback
`


`

extends https://developer.android.com/reference/java/lang/Object


`

`


`

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | android.content.pm.LauncherApps.Callback |

<br />

*** ** * ** ***

Callbacks for package changes to this and related managed profiles.

## Summary

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#Callback()() ` |

| ### Public methods ||
|---|---|
| ` abstract void` | ` https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#onPackageAdded(java.lang.String,%20android.os.UserHandle)(https://developer.android.com/reference/java/lang/String packageName, https://developer.android.com/reference/android/os/UserHandle user) ` Indicates that a package was added to the specified profile. |
| ` abstract void` | ` https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#onPackageChanged(java.lang.String,%20android.os.UserHandle)(https://developer.android.com/reference/java/lang/String packageName, https://developer.android.com/reference/android/os/UserHandle user) ` Indicates that a package was modified in the specified profile. |
| ` void` | ` https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#onPackageLoadingProgressChanged(java.lang.String,%20android.os.UserHandle,%20float)(https://developer.android.com/reference/java/lang/String packageName, https://developer.android.com/reference/android/os/UserHandle user, float progress) ` Indicates that the loading progress of an installed package has changed. |
| ` abstract void` | ` https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#onPackageRemoved(java.lang.String,%20android.os.UserHandle)(https://developer.android.com/reference/java/lang/String packageName, https://developer.android.com/reference/android/os/UserHandle user) ` Indicates that a package was removed from the specified profile. |
| ` abstract void` | ` https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#onPackagesAvailable(java.lang.String[],%20android.os.UserHandle,%20boolean)(https://developer.android.com/reference/java/lang/String packageNames, https://developer.android.com/reference/android/os/UserHandle user, boolean replacing) ` Indicates that one or more packages have become available. |
| ` void` | ` https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#onPackagesSuspended(java.lang.String[],%20android.os.UserHandle,%20android.os.Bundle)(https://developer.android.com/reference/java/lang/String packageNames, https://developer.android.com/reference/android/os/UserHandle user, https://developer.android.com/reference/android/os/Bundle launcherExtras) ` *This method was deprecated in API level 30. `launcherExtras` should be obtained by using `https://developer.android.com/reference/android/content/pm/LauncherApps#getSuspendedPackageLauncherExtras(java.lang.String,%20android.os.UserHandle)`. For all other cases, `https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#onPackagesSuspended(java.lang.String[],%20android.os.UserHandle)` should be used.* |
| ` void` | ` https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#onPackagesSuspended(java.lang.String[],%20android.os.UserHandle)(https://developer.android.com/reference/java/lang/String packageNames, https://developer.android.com/reference/android/os/UserHandle user) ` Indicates that one or more packages have been suspended. |
| ` abstract void` | ` https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#onPackagesUnavailable(java.lang.String[],%20android.os.UserHandle,%20boolean)(https://developer.android.com/reference/java/lang/String packageNames, https://developer.android.com/reference/android/os/UserHandle user, boolean replacing) ` Indicates that one or more packages have become unavailable. |
| ` void` | ` https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#onPackagesUnsuspended(java.lang.String[],%20android.os.UserHandle)(https://developer.android.com/reference/java/lang/String packageNames, https://developer.android.com/reference/android/os/UserHandle user) ` Indicates that one or more packages have been unsuspended. |
| ` void` | ` https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#onShortcutsChanged(java.lang.String,%20java.util.List<android.content.pm.ShortcutInfo>,%20android.os.UserHandle)(https://developer.android.com/reference/java/lang/String packageName, https://developer.android.com/reference/java/util/List<https://developer.android.com/reference/android/content/pm/ShortcutInfo> shortcuts, https://developer.android.com/reference/android/os/UserHandle user) ` Indicates that one or more shortcuts of any kind (dynamic, pinned, or manifest) have been added, updated or removed. |
| ` void` | ` https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#onUserConfigChanged(android.content.pm.LauncherUserInfo)(https://developer.android.com/reference/android/content/pm/LauncherUserInfo launcherUserInfo) ` Indicates `https://developer.android.com/reference/android/content/pm/LauncherUserInfo` configs for a user have changed. |

### Inherited methods

From class `

https://developer.android.com/reference/java/lang/Object

` `


https://developer.android.com/reference/java/lang/Object` `
https://developer.android.com/reference/java/lang/Object#clone()()
`

Creates and returns a copy of this object.


`


boolean` `
https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj)
`

Indicates whether some other object is "equal to" this one.


`


void` `
https://developer.android.com/reference/java/lang/Object#finalize()()
`

Called by the garbage collector on an object when garbage collection
determines that there are no more references to the object.


`


final

https://developer.android.com/reference/java/lang/Class<?>` `
https://developer.android.com/reference/java/lang/Object#getClass()()
`

Returns the runtime class of this `Object`.


`


int` `
https://developer.android.com/reference/java/lang/Object#hashCode()()
`

Returns a hash code value for the object.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#notify()()
`

Wakes up a single thread that is waiting on this object's
monitor.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#notifyAll()()
`

Wakes up all threads that are waiting on this object's monitor.


`


https://developer.android.com/reference/java/lang/String` `
https://developer.android.com/reference/java/lang/Object#toString()()
`

Returns a string representation of the object.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos)
`

Causes the current thread to wait until it is awakened, typically
by being *notified* or *interrupted*, or until a
certain amount of real time has elapsed.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis)
`

Causes the current thread to wait until it is awakened, typically
by being *notified* or *interrupted*, or until a
certain amount of real time has elapsed.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#wait()()
`

Causes the current thread to wait until it is awakened, typically
by being *notified* or *interrupted*.


## Public constructors

### Callback

```
public Callback ()
```

<br />

<br />

## Public methods

### onPackageAdded

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

```
public abstract void onPackageAdded (String packageName, 
                UserHandle user)
```

Indicates that a package was added to the specified profile.

If a package is added while being updated then onPackageChanged will be
called instead.

<br />

| Parameters ||
|---|---|
| `packageName` | `String`: The name of the package that was added. <br /> |
| `user` | `UserHandle`: The UserHandle of the profile that generated the change. <br /> |

### onPackageChanged

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

```
public abstract void onPackageChanged (String packageName, 
                UserHandle user)
```

Indicates that a package was modified in the specified profile.
This can happen, for example, when the package is updated or when
one or more components are enabled or disabled.

This callback is also invoked when the App Lock enablement state changes for a
package. See `https://developer.android.com/reference/android/content/pm/PackageManager#getEnableAppLockIntentForPackage(java.lang.String,%20boolean)` for more
information about App Lock.

<br />

| Parameters ||
|---|---|
| `packageName` | `String`: The name of the package that has changed. <br /> |
| `user` | `UserHandle`: The UserHandle of the profile that generated the change. <br /> |

### onPackageLoadingProgressChanged

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

```
public void onPackageLoadingProgressChanged (String packageName, 
                UserHandle user, 
                float progress)
```

Indicates that the loading progress of an installed package has changed.

<br />

| Parameters ||
|---|---|
| `packageName` | `String`: The name of the package that has changed. This value cannot be `null`. <br /> |
| `user` | `UserHandle`: The UserHandle of the profile that generated the change. This value cannot be `null`. <br /> |
| `progress` | `float`: The new progress value, between \[0, 1\]. <br /> |

### onPackageRemoved

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

```
public abstract void onPackageRemoved (String packageName, 
                UserHandle user)
```

Indicates that a package was removed from the specified profile.

If a package is removed while being updated onPackageChanged will be
called instead.

<br />

| Parameters ||
|---|---|
| `packageName` | `String`: The name of the package that was removed. <br /> |
| `user` | `UserHandle`: The UserHandle of the profile that generated the change. <br /> |

### onPackagesAvailable

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

```
public abstract void onPackagesAvailable (String[] packageNames, 
                UserHandle user, 
                boolean replacing)
```

Indicates that one or more packages have become available. For
example, this can happen when a removable storage card has
reappeared.

<br />

| Parameters ||
|---|---|
| `packageNames` | `String`: The names of the packages that have become available. <br /> |
| `user` | `UserHandle`: The UserHandle of the profile that generated the change. <br /> |
| `replacing` | `boolean`: Indicates whether these packages are replacing existing ones. <br /> |

### onPackagesSuspended

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

```
public void onPackagesSuspended (String[] packageNames, 
                UserHandle user, 
                Bundle launcherExtras)
```


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

`launcherExtras` should be obtained by using
`https://developer.android.com/reference/android/content/pm/LauncherApps#getSuspendedPackageLauncherExtras(java.lang.String,%20android.os.UserHandle)`. For all other cases,
`https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#onPackagesSuspended(java.lang.String[],%20android.os.UserHandle)` should be used.

Indicates that one or more packages have been suspended. A device administrator or an app
with `android.permission.SUSPEND_APPS` can do this.

A suspending app with the permission `android.permission.SUSPEND_APPS` can
optionally provide a `https://developer.android.com/reference/android/os/Bundle` of extra information that it deems helpful for the
launcher to handle the suspended state of these packages. The contents of this
`https://developer.android.com/reference/android/os/Bundle` are supposed to be a contract between the suspending app and the launcher.

<br />

| Parameters ||
|---|---|
| `packageNames` | `String`: The names of the packages that have just been suspended. <br /> |
| `user` | `UserHandle`: the user for which the given packages were suspended. <br /> |
| `launcherExtras` | `Bundle`: A `https://developer.android.com/reference/android/os/Bundle` of extras for the launcher, if provided to the system, `null` otherwise. <br /> |

**See also:**

- `https://developer.android.com/reference/android/content/pm/PackageManager#isPackageSuspended()`
- `https://developer.android.com/reference/android/content/pm/LauncherApps#getSuspendedPackageLauncherExtras(java.lang.String,%20android.os.UserHandle)`

### onPackagesSuspended

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

```
public void onPackagesSuspended (String[] packageNames, 
                UserHandle user)
```

Indicates that one or more packages have been suspended. For
example, this can happen when a Device Administrator suspends
an applicaton.

Note: On devices running `https://developer.android.com/reference/android/os/Build.VERSION_CODES#P` or higher,
any apps that override `https://developer.android.com/reference/android/content/pm/LauncherApps.Callback#onPackagesSuspended(java.lang.String[],%20android.os.UserHandle,%20android.os.Bundle)` will
not receive this callback.

<br />

| Parameters ||
|---|---|
| `packageNames` | `String`: The names of the packages that have just been suspended. <br /> |
| `user` | `UserHandle`: The UserHandle of the profile that generated the change. <br /> |

### onPackagesUnavailable

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

```
public abstract void onPackagesUnavailable (String[] packageNames, 
                UserHandle user, 
                boolean replacing)
```

Indicates that one or more packages have become unavailable. For
example, this can happen when a removable storage card has been
removed.

<br />

| Parameters ||
|---|---|
| `packageNames` | `String`: The names of the packages that have become unavailable. <br /> |
| `user` | `UserHandle`: The UserHandle of the profile that generated the change. <br /> |
| `replacing` | `boolean`: Indicates whether the packages are about to be replaced with new versions. <br /> |

### onPackagesUnsuspended

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

```
public void onPackagesUnsuspended (String[] packageNames, 
                UserHandle user)
```

Indicates that one or more packages have been unsuspended. For
example, this can happen when a Device Administrator unsuspends
an applicaton.

<br />

| Parameters ||
|---|---|
| `packageNames` | `String`: The names of the packages that have just been unsuspended. <br /> |
| `user` | `UserHandle`: The UserHandle of the profile that generated the change. <br /> |

### onShortcutsChanged

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

```
public void onShortcutsChanged (String packageName, 
                List<ShortcutInfo> shortcuts, 
                UserHandle user)
```

Indicates that one or more shortcuts of any kind (dynamic, pinned, or manifest)
have been added, updated or removed.

Only the applications that are allowed to access the shortcut information,
as defined in `https://developer.android.com/reference/android/content/pm/LauncherApps#hasShortcutHostPermission()`, will receive it.

<br />

| Parameters ||
|---|---|
| `packageName` | `String`: The name of the package that has the shortcuts. This value cannot be `null`. <br /> |
| `shortcuts` | `List`: All shortcuts from the package (dynamic, manifest and/or pinned). Only "key" information will be provided, as defined in `https://developer.android.com/reference/android/content/pm/ShortcutInfo#hasKeyFieldsOnly()`. This value cannot be `null`. <br /> |
| `user` | `UserHandle`: The UserHandle of the profile that generated the change. This value cannot be `null`. <br /> |

**See also:**

- `https://developer.android.com/reference/android/content/pm/ShortcutManager`

### onUserConfigChanged

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

```
public void onUserConfigChanged (LauncherUserInfo launcherUserInfo)
```

Indicates `https://developer.android.com/reference/android/content/pm/LauncherUserInfo` configs for a user have changed. The new
`https://developer.android.com/reference/android/content/pm/LauncherUserInfo` is given as a parameter.

`https://developer.android.com/reference/android/content/pm/LauncherUserInfo#getUserConfig()` to get the updated user configs.

<br />

| Parameters ||
|---|---|
| `launcherUserInfo` | `LauncherUserInfo`: The LauncherUserInfo of the user/profile whose configs have changed. This value cannot be `null`. <br /> |