Статические ярлыки были представлены в Android 7.1 (API Level 25) и упрощают предоставление пользователям быстрого доступа к вашему приложению.

Я большой поклонник анимационной библиотеки с открытым исходным кодом Airbnb Lottie. Анимации, как известно, сложно создавать на Android, и эта библиотека избавляет от всех этих проблем. Чтобы продемонстрировать эту библиотеку, Airbnb выпустила пример приложения в магазине игр. Я часто использую это для просмотра анимации и экспериментов с потрясающей анимированной типографикой.

Я решил добавить статические ярлыки в этот пример приложения, чтобы получить доступ ко всем его функциям еще быстрее. Пример приложения состоит из действия основного списка с 4 параметрами.

Нажатие на эти параметры запустит либо фрагмент, либо активность. Моя цель состояла в том, чтобы обойти этот начальный экран с ярлыками и запускать каждую функцию непосредственно с домашнего экрана пользователя.

Сначала мне нужно получить несколько значков для моих ярлыков!

Иконки

Прежде чем приступить к созданию ярлыков, стоит прочитать Руководство по дизайну ярлыков приложений. Здесь описаны особенности создания ярлыка. Изначально я использовал фантастическую Студию Android Asset от Романа Нурика, так как он уже разработал генератор иконок ярлыков. Однако после некоторой обратной связи с общественностью я создал свои собственные векторные чертежи (студия ресурсов Android генерирует только png). Для справки: внешний круг имеет размеры 48 dp на 48 dp, а внутренний значок должен иметь размер 24 dp на 24 dp. Даже такой новичок в рисовании, как я, смог создать несколько прилично выглядящих иконок!

Код

Следуя шагам в dev docs, вы должны сначала определить файл ярлыков.xml в своем манифесте.

<meta-data android:name="android.app.shortcuts"
                 android:resource="@xml/shortcuts" />

Затем создайте файл ярлыков и добавьте соответствующие ярлыки.

<shortcut
    android:enabled="true"
    android:icon="@drawable/ic_shortcut_animation_viewer"
    android:shortcutDisabledMessage="@string/shortcut_disabled"
    android:shortcutId="animationViewer"
    android:shortcutLongLabel="@string/shortcut_animation_viewer"
    android:shortcutShortLabel="@string/shortcut_animation_viewer_short"
    tools:targetApi="n_mr1">
    <intent
        android:action="com.airbnb.lottie.samples.shortcut.VIEWER"
        android:targetClass="com.airbnb.lottie.samples.MainActivity"
        android:targetPackage="com.airbnb.lottie"/>
</shortcut>
<!--More shortcuts here-->

Это очень просто! После определения того, какой значок и текст вы хотите показать, в основном нужно указать целевое действие и класс.

В случае с Лотти я хотел запустить действие основного списка для каждого ярлыка, а затем открыть соответствующий экран, таким образом, кнопка «Назад» будет перемещаться к списку, как и ожидалось, а не выходить из приложения. Для этого я установил определенное действие для каждого ярлыка, а затем получил это действие с помощью getIntent().getAction().

@Override public void onCreate(@Nullable Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  handleShortcut(getActivity().getIntent().getAction());
}

.....

/**
 * Starts the relevant activity/fragment based on which shortcut has been pressed
 * @param intentAction specific shortcut action
 */
private void handleShortcut(String intentAction) {
  switch (intentAction) {
    case SHORTCUT_VIEWER:
      onViewerClicked();
      break;
    case SHORTCUT_TYPOGRAPHY:
      onTypographyClicked();
      break;
    case SHORTCUT_TUTORIAL:
      onAppIntroPagerClicked();
      break;
    case SHORTCUT_FULLSCREEN:
      onFullScreenClicked();
      break;
  }
}

Если вам нужно больше контроля над вашими ярлыками, вы можете использовать динамические ярлыки. ShortcutManagerAPI может создавать, обновлять и удалять ярлыки на лету.

Вот мой запрос на вытягивание для Lottie Android, если вы хотите просмотреть код полностью.

Спасибо за чтение!