Save the date! Android Dev Summit is coming to Mountain View, CA on November 7-8, 2018.
added in API level 25

ShortcutManager

public class ShortcutManager
extends Object

java.lang.Object
   ↳ android.content.pm.ShortcutManager


ShortcutManager executes operations on an app's set of shortcuts, which represent specific tasks and actions that users can perform within your app. This page lists components of the ShortcutManager class that you can use to create and manage sets of shortcuts.

To learn about methods that retrieve information about a single shortcut—including identifiers, type, and status—read the ShortcutInfo reference.

For guidance about using shortcuts, see App shortcuts.

Retrieving class instances

Instances of this class must be obtained using Context.getSystemService(Class) with the argument ShortcutManager.class or Context.getSystemService(String) with the argument Context.SHORTCUT_SERVICE.

Summary

Public methods

boolean addDynamicShortcuts(List<ShortcutInfo> shortcutInfoList)

Publish the list of dynamic shortcuts.

Intent createShortcutResultIntent(ShortcutInfo shortcut)

Returns an Intent which can be used by the default launcher to pin a shortcut containing the given ShortcutInfo.

void disableShortcuts(List<String> shortcutIds)

Disable pinned shortcuts.

void disableShortcuts(List<String> shortcutIds, CharSequence disabledMessage)

Disable pinned shortcuts, showing the user a custom error message when they try to select the disabled shortcuts.

void enableShortcuts(List<String> shortcutIds)

Re-enable pinned shortcuts that were previously disabled.

List<ShortcutInfo> getDynamicShortcuts()

Return all dynamic shortcuts from the caller app.

int getIconMaxHeight()

Return the max height for icons, in pixels.

int getIconMaxWidth()

Return the max width for icons, in pixels.

List<ShortcutInfo> getManifestShortcuts()

Return all static (manifest) shortcuts from the caller app.

int getMaxShortcutCountPerActivity()

Return the maximum number of static and dynamic shortcuts that each launcher icon can have at a time.

List<ShortcutInfo> getPinnedShortcuts()

Return all pinned shortcuts from the caller app.

boolean isRateLimitingActive()

Return true when rate-limiting is active for the caller app.

boolean isRequestPinShortcutSupported()

Return TRUE if the app is running on a device whose default launcher supports requestPinShortcut(ShortcutInfo, IntentSender).

void removeAllDynamicShortcuts()

Delete all dynamic shortcuts from the caller app.

void removeDynamicShortcuts(List<String> shortcutIds)

Delete dynamic shortcuts by ID.

void reportShortcutUsed(String shortcutId)

Apps that publish shortcuts should call this method whenever the user selects the shortcut containing the given ID or when the user completes an action in the app that is equivalent to selecting the shortcut.

boolean requestPinShortcut(ShortcutInfo shortcut, IntentSender resultIntent)

Request to create a pinned shortcut.

boolean setDynamicShortcuts(List<ShortcutInfo> shortcutInfoList)

Publish the list of shortcuts.

boolean updateShortcuts(List<ShortcutInfo> shortcutInfoList)

Update all existing shortcuts with the same IDs.

Inherited methods

Public methods

addDynamicShortcuts

added in API level 25
public boolean addDynamicShortcuts (List<ShortcutInfo> shortcutInfoList)

Publish the list of dynamic shortcuts. If there are already dynamic or pinned shortcuts with the same IDs, each mutable shortcut is updated.

This API will be rate-limited.

Parameters
shortcutInfoList List

This value must never be null.

Returns
boolean true if the call has succeeded. false if the call is rate-limited.

Throws
IllegalArgumentException if getMaxShortcutCountPerActivity() is exceeded, or when trying to update immutable shortcuts.
IllegalStateException when the user is locked.

createShortcutResultIntent

added in API level 26
public Intent createShortcutResultIntent (ShortcutInfo shortcut)

Returns an Intent which can be used by the default launcher to pin a shortcut containing the given ShortcutInfo. This method should be used by an Activity to set a result in response to Intent.ACTION_CREATE_SHORTCUT.

Parameters
shortcut ShortcutInfo: New shortcut to pin. If an app wants to pin an existing (either dynamic or manifest) shortcut, then it only needs to have an ID, and other fields don't have to be set, in which case, the target shortcut must be enabled. If it's a new shortcut, all the mandatory fields, such as a short label, must be set.

This value must never be null.

Returns
Intent The intent that should be set as the result for the calling activity, or null if the current launcher doesn't support shortcuts.

Throws
IllegalArgumentException if a shortcut with the same ID exists and is disabled.

disableShortcuts

added in API level 25
public void disableShortcuts (List<String> shortcutIds)

Disable pinned shortcuts. For more details, read Disable shortcuts.

Parameters
shortcutIds List

This value must never be null.

Throws
IllegalArgumentException If trying to disable immutable shortcuts.
IllegalStateException when the user is locked.

disableShortcuts

added in API level 25
public void disableShortcuts (List<String> shortcutIds, 
                CharSequence disabledMessage)

Disable pinned shortcuts, showing the user a custom error message when they try to select the disabled shortcuts. For more details, read Disable shortcuts.

Parameters
shortcutIds List

This value must never be null.

disabledMessage CharSequence

Throws
IllegalArgumentException If trying to disable immutable shortcuts.
IllegalStateException when the user is locked.

enableShortcuts

added in API level 25
public void enableShortcuts (List<String> shortcutIds)

Re-enable pinned shortcuts that were previously disabled. If the target shortcuts are already enabled, this method does nothing.

Parameters
shortcutIds List

This value must never be null.

Throws
IllegalArgumentException If trying to enable immutable shortcuts.
IllegalStateException when the user is locked.

getDynamicShortcuts

added in API level 25
public List<ShortcutInfo> getDynamicShortcuts ()

Return all dynamic shortcuts from the caller app.

This API is intended to be used for examining what shortcuts are currently published. Re-publishing returned ShortcutInfos via APIs such as setDynamicShortcuts(List) may cause loss of information such as icons.

Returns
List<ShortcutInfo>

This value will never be null.

Throws
IllegalStateException when the user is locked.

getIconMaxHeight

added in API level 25
public int getIconMaxHeight ()

Return the max height for icons, in pixels.

Returns
int

getIconMaxWidth

added in API level 25
public int getIconMaxWidth ()

Return the max width for icons, in pixels.

Note that this method returns max width of icon's visible part. Hence, it does not take into account the inset introduced by AdaptiveIconDrawable. To calculate bitmap image to function as AdaptiveIconDrawable, multiply 1 + 2 * AdaptiveIconDrawable.getExtraInsetFraction() to the returned size.

Returns
int

getManifestShortcuts

added in API level 25
public List<ShortcutInfo> getManifestShortcuts ()

Return all static (manifest) shortcuts from the caller app.

This API is intended to be used for examining what shortcuts are currently published. Re-publishing returned ShortcutInfos via APIs such as setDynamicShortcuts(List) may cause loss of information such as icons.

Returns
List<ShortcutInfo>

This value will never be null.

Throws
IllegalStateException when the user is locked.

getMaxShortcutCountPerActivity

added in API level 25
public int getMaxShortcutCountPerActivity ()

Return the maximum number of static and dynamic shortcuts that each launcher icon can have at a time.

Returns
int

getPinnedShortcuts

added in API level 25
public List<ShortcutInfo> getPinnedShortcuts ()

Return all pinned shortcuts from the caller app.

This API is intended to be used for examining what shortcuts are currently published. Re-publishing returned ShortcutInfos via APIs such as setDynamicShortcuts(List) may cause loss of information such as icons.

Returns
List<ShortcutInfo>

This value will never be null.

Throws
IllegalStateException when the user is locked.

isRateLimitingActive

added in API level 25
public boolean isRateLimitingActive ()

Return true when rate-limiting is active for the caller app.

For details, see Rate limiting.

Returns
boolean

Throws
IllegalStateException when the user is locked.

isRequestPinShortcutSupported

added in API level 26
public boolean isRequestPinShortcutSupported ()

Return TRUE if the app is running on a device whose default launcher supports requestPinShortcut(ShortcutInfo, IntentSender).

The return value may change in subsequent calls if the user changes the default launcher app.

Note: See also the support library counterpart ShortcutManagerCompat.isRequestPinShortcutSupported(Context), which supports Android versions lower than Build.VERSION_CODES.O using the legacy private intent com.android.launcher.action.INSTALL_SHORTCUT.

Returns
boolean

removeAllDynamicShortcuts

added in API level 25
public void removeAllDynamicShortcuts ()

Delete all dynamic shortcuts from the caller app.

Throws
IllegalStateException when the user is locked.

removeDynamicShortcuts

added in API level 25
public void removeDynamicShortcuts (List<String> shortcutIds)

Delete dynamic shortcuts by ID.

Parameters
shortcutIds List

This value must never be null.

Throws
IllegalStateException when the user is locked.

reportShortcutUsed

added in API level 25
public void reportShortcutUsed (String shortcutId)

Apps that publish shortcuts should call this method whenever the user selects the shortcut containing the given ID or when the user completes an action in the app that is equivalent to selecting the shortcut. For more details, read about tracking shortcut usage.

The information is accessible via UsageStatsManager.queryEvents(long, long) Typically, launcher apps use this information to build a prediction model so that they can promote the shortcuts that are likely to be used at the moment.

Parameters
shortcutId String

Throws
IllegalStateException when the user is locked.

requestPinShortcut

added in API level 26
public boolean requestPinShortcut (ShortcutInfo shortcut, 
                IntentSender resultIntent)

Request to create a pinned shortcut. The default launcher will receive this request and ask the user for approval. If the user approves it, the shortcut will be created, and resultIntent will be sent. If a request is denied by the user, however, no response will be sent to the caller.

Only apps with a foreground activity or a foreground service can call this method. Otherwise, it'll throw IllegalStateException.

It's up to the launcher to decide how to handle previous pending requests when the same package calls this API multiple times in a row. One possible strategy is to ignore any previous requests.

Note: See also the support library counterpart ShortcutManagerCompat.requestPinShortcut(Context, ShortcutInfoCompat, IntentSender), which supports Android versions lower than Build.VERSION_CODES.O using the legacy private intent com.android.launcher.action.INSTALL_SHORTCUT.

Parameters
shortcut ShortcutInfo: Shortcut to pin. If an app wants to pin an existing (either static or dynamic) shortcut, then it only needs to have an ID. Although other fields don't have to be set, the target shortcut must be enabled.

If it's a new shortcut, all the mandatory fields, such as a short label, must be set.

This value must never be null.

resultIntent IntentSender: If not null, this intent will be sent when the shortcut is pinned. Use PendingIntent.getIntentSender() to create an IntentSender. To avoid background execution limits, use an unexported, manifest-declared receiver. For more details, see Creating pinned shortcuts.

Returns
boolean TRUE if the launcher supports this feature. Note the API will return without waiting for the user to respond, so getting TRUE from this API does *not* mean the shortcut was pinned successfully. FALSE if the launcher doesn't support this feature.

Throws
IllegalArgumentException if a shortcut with the same ID exists and is disabled.
IllegalStateException The caller doesn't have a foreground activity or a foreground service, or the device is locked.

setDynamicShortcuts

added in API level 25
public boolean setDynamicShortcuts (List<ShortcutInfo> shortcutInfoList)

Publish the list of shortcuts. All existing dynamic shortcuts from the caller app will be replaced. If there are already pinned shortcuts with the same IDs, the mutable pinned shortcuts are updated.

This API will be rate-limited.

Parameters
shortcutInfoList List

This value must never be null.

Returns
boolean true if the call has succeeded. false if the call is rate-limited.

Throws
IllegalArgumentException if getMaxShortcutCountPerActivity() is exceeded, or when trying to update immutable shortcuts.
IllegalStateException when the user is locked.

updateShortcuts

added in API level 25
public boolean updateShortcuts (List<ShortcutInfo> shortcutInfoList)

Update all existing shortcuts with the same IDs. Target shortcuts may be pinned and/or dynamic, but they must not be immutable.

This API will be rate-limited.

Parameters
shortcutInfoList List

This value must never be null.

Returns
boolean true if the call has succeeded. false if the call is rate-limited.

Throws
IllegalArgumentException If trying to update immutable shortcuts.
IllegalStateException when the user is locked.