Создать ярлык

Ярлыки помогают пользователям быстро переходить к определенным разделам приложения.

Разница между ярлыками приложений и закрепленными ярлыками
Рисунок 1. Ярлыки приложений и закрепленные ярлыки.

Способ доставки контента с помощью ярлыков зависит от вашего варианта использования и от того, определяется ли контекст ярлыка приложением или пользователем. Хотя контекст статического ярлыка не меняется, а контекст динамического ярлыка постоянно меняется, ваше приложение управляет контекстом в обоих случаях. Если пользователь сам выбирает, как приложение будет предоставлять ему контент, например с помощью закрепленного ярлыка, то контекст определяется пользователем. Ниже описаны сценарии использования для каждого типа ярлыков.

  • Статические ярлыки лучше всего подходят для приложений, которые ссылаются на контент, используя согласованную структуру на протяжении всего времени взаимодействия пользователя с приложением. Поскольку большинство программ запуска одновременно отображают только четыре ярлыка, статические ярлыки полезны для последовательного выполнения рутинных задач, например, если пользователь хочет просмотреть свой календарь или электронную почту определенным образом.
  • Динамические ярлыки используются для действий в приложениях, которые зависят от контекста. Контекстно-зависимые ярлыки адаптируются к действиям пользователей в приложении. Например, если вы создаете игру, в которой пользователь может начать с текущего уровня при запуске, вам нужно часто обновлять ярлык. Используя динамический ярлык, вы можете обновлять его каждый раз, когда пользователь проходит уровень.
  • Закрепленные ярлыки используются для определенных действий, выполняемых пользователем. Например, пользователь может закрепить на панели запуска определенный сайт. Это удобно, поскольку позволяет пользователю выполнить настраиваемое действие, например перейти на сайт за один шаг, быстрее, чем при использовании экземпляра браузера по умолчанию.

Как создать статические ярлыки

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

Чтобы создать статический ярлык, выполните следующие действия:

  1. В файле AndroidManifest.xml приложения найдите объект activity, фильтры интентов которого настроены на действие android.intent.action.MAIN и категорию android.intent.category.LAUNCHER.
  2. Добавьте в этот объект activity элемент <meta-data>, который ссылается на файл ресурсов, где определены ярлыки приложения:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.example.myapplication">
      <application ... >
        <activity android:name="Main">
          <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
          <meta-data android:name="android.app.shortcuts"
                     android:resource="@xml/shortcuts" />
        </activity>
      </application>
    </manifest>
    
  3. Создайте файл ресурсов с названием res/xml/shortcuts.xml.

  4. В новом файле ресурсов добавьте корневой элемент <shortcuts>, содержащий список элементов <shortcut>. В каждый элемент <shortcut> добавьте информацию о статическом ярлыке, включая его значок, ярлыки описания и намерения, которые он запускает в приложении:

    <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
      <shortcut
        android:shortcutId="compose"
        android:enabled="true"
        android:icon="@drawable/compose_icon"
        android:shortcutShortLabel="@string/compose_shortcut_short_label1"
        android:shortcutLongLabel="@string/compose_shortcut_long_label1"
        android:shortcutDisabledMessage="@string/compose_disabled_message1">
        <intent
          android:action="android.intent.action.VIEW"
          android:targetPackage="com.example.myapplication"
          android:targetClass="com.example.myapplication.Main" />
        <!-- If your shortcut is associated with multiple intents, include them
             here. The last intent in the list determines what the user sees when
             they launch this shortcut. -->
        <categories android:name="android.shortcut.conversation" />
        <capability-binding android:key="actions.intent.CREATE_MESSAGE" />
      </shortcut>
      <!-- Specify more shortcuts here. -->
    </shortcuts>

Как настроить значения атрибутов

Ниже приведены описания различных атрибутов статического ярлыка. Укажите значения для атрибутов android:shortcutId и android:shortcutShortLabel. Все остальные значения необязательны.

android:shortcutId

Строковый литерал, который представляет ярлык, когда объект ShortcutManager выполняет с ним операции.

android:shortcutShortLabel

Краткая фраза, описывающая назначение ярлыка. По возможности ограничьте краткое описание 10 символами.

Дополнительную информацию вы найдете в статье setShortLabel().

android:shortcutLongLabel

Развернутое описание назначения ярлыка. Если места достаточно, на панели запуска вместо android:shortcutShortLabel будет показываться это значение. По возможности ограничьте длину этого описания 25 символами.

Дополнительную информацию вы найдете в статье setLongLabel().

android:shortcutDisabledMessage

Сообщение, которое появляется в поддерживаемом лаунчере, когда пользователь пытается запустить отключенный ярлык. В сообщении должно быть объяснено, почему ярлык отключен. Значение этого атрибута не действует, если для атрибута android:enabled задано значение true.

android:enabled

Определяет, может ли пользователь взаимодействовать с ярлыком в поддерживаемом лаунчере. Значение по умолчанию для android:enabled – true. Если вы зададите значение false, укажите в android:shortcutDisabledMessage причину отключения ярлыка. Если вы считаете, что такое сообщение не нужно, полностью удалите ярлык из XML-файла.

android:icon

Растровое изображение или адаптивный значок, который используется в панели запуска при показе ярлыка пользователю. Это значение может быть путем к изображению или файлу ресурса, содержащему изображение. По возможности используйте адаптивные значки, чтобы повысить эффективность и единообразие.

Настройка внутренних элементов

XML-файл со списком статических ярлыков приложения поддерживает следующие элементы внутри каждого элемента <shortcut>. Для каждого статического ярлыка необходимо указать внутренний элемент intent.

intent

Действие, которое запускается, когда пользователь выбирает ярлык. В этом намерении должно быть указано значение атрибута android:action.

Для одного ярлыка можно указать несколько намерений. Подробную информацию вы найдете в статьях Управление несколькими намерениями и действиями и Настройка намерения, а также в справочной статье о классе TaskStackBuilder.

categories

Группирует типы действий, которые выполняются с помощью ярлыков приложения, например создание новых сообщений в чате.

Список поддерживаемых категорий ярлыков можно найти в справочной статье о классе ShortcutInfo.

capability-binding

Объявляет возможность, связанную с ярлыком.

В предыдущем примере ярлык связан с функцией, объявленной для CREATE_MESSAGE, которая является встроенным намерением действий в приложении. Это позволяет пользователям вызывать ярлык с помощью голосовых команд Google Ассистенту.

Как создать динамические ярлыки

Динамические ярлыки предоставляют ссылки на определенные контекстно-зависимые действия в вашем приложении. Эти действия могут меняться между использованиями вашего приложения и во время его работы. Примеры: звонок определенному человеку, навигация к определенному месту, загрузка игры с последнего сохранения. Вы также можете использовать динамические ярлыки, чтобы открыть чат.

Библиотека Jetpack ShortcutManagerCompat – это вспомогательный инструмент для API ShortcutManager, который позволяет управлять динамическими ярлыками в приложении. Использование библиотеки ShortcutManagerCompat сокращает объем шаблонного кода и помогает обеспечить стабильную работу ярлыков в разных версиях Android. Эта библиотека также необходима для отправки динамических ярлыков, чтобы они могли появляться на платформах Google, например в Ассистенте, с помощью библиотеки интеграции ярлыков Google.

ShortcutManagerCompat API позволяет выполнять следующие операции с динамическими ярлыками:

  • Публикация и обновление. Используйте pushDynamicShortcut(), чтобы публиковать и обновлять динамические ярлыки. Если уже есть динамические или закрепленные ярлыки с тем же идентификатором, каждый изменяемый ярлык обновляется.
  • Удаление. Удалите набор динамических ярлыков с помощью метода removeDynamicShortcuts(). Удалите все динамические ярлыки с помощью removeAllDynamicShortcuts().

Дополнительную информацию о работе с ярлыками можно найти в статье Как управлять ярлыками и в справочнике по ShortcutManagerCompat.

Вот пример создания динамического ярлыка и его связывания с приложением:

val shortcut = ShortcutInfoCompat.Builder(context, "id1")
    .setShortLabel("Website")
    .setLongLabel("Open the website")
    .setIcon(IconCompat.createWithResource(context, R.drawable.icon_website))
    .setIntent(
        Intent(
            Intent.ACTION_VIEW,
            Uri.parse("https://www.mysite.example.com/")
        )
    )
    .build()

ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)

Добавьте библиотеку Google Shortcuts Integration Library

Библиотека интеграции ярлыков Google – это необязательная библиотека Jetpack. Она позволяет отправлять динамические ярлыки, которые могут показываться на платформах Android, например в панели запуска, и платформах Google. С помощью этой библиотеки пользователи могут находить ярлыки для быстрого доступа к определенному контенту или повторного выполнения действий в приложении.

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

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

Библиотека интеграции ярлыков Google не предлагает никаких адресуемых функций. Добавив эту библиотеку в приложение, вы разрешите сервисам Google принимать ярлыки, которые приложение отправляет с помощью ShortcutManagerCompat.

Чтобы использовать эту библиотеку в приложении, добавьте зависимости для библиотеки интеграции ярлыков Google и ShortcutManagerCompat в файл app/build.gradle или app/build.gradle.kts:

Kotlin

dependencies {
    implementation("androidx.core:core:1.6.0")
    implementation("androidx.core:core-google-shortcuts:1.0.0")
}

Яркий

dependencies {
    implementation "androidx.core:core:1.6.0"
    implementation 'androidx.core:core-google-shortcuts:1.0.0'
}

После добавления зависимостей библиотек в проект для Android ваше приложение сможет использовать метод pushDynamicShortcut() из ShortcutManagerCompat, чтобы отправлять динамические ярлыки, которые могут показываться в панели запуска и на поддерживаемых платформах Google.

Как создать закрепленные ярлыки

В Android 8.0 (уровень API 26) и более поздних версиях можно создавать закрепленные ярлыки. В отличие от статических и динамических ярлыков, закрепленные ярлыки отображаются в поддерживаемых лаунчерах как отдельные значки. На рисунке 1 показано различие между этими двумя типами ярлыков.

Чтобы закрепить ярлык в поддерживаемом лаунчере с помощью приложения, выполните следующие действия:

  1. Используйте isRequestPinShortcutSupported(), чтобы проверить, поддерживает ли стандартный лаунчер устройства закрепление ярлыков в приложении.
  2. Создайте объект ShortcutInfoCompat, содержащий идентификатор, намерение и короткую метку для ярлыка. Если ярлык существует, используйте его идентификатор. Система автоматически находит и закрепляет всю остальную информацию, связанную с ярлыком.

  3. Закрепите ярлык на панели запуска устройства, вызвав метод requestPinShortcut(). В процессе можно передать объект PendingIntent, который уведомляет приложение только в случае успешного закрепления ярлыка.

    После закрепления ярлыка приложение может обновлять его содержимое с помощью метода updateShortcuts(). Подробнее о том, как обновить ярлыки…

В следующем фрагменте кода показано, как создать закрепленный ярлык:

if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)) {
    // Enable the existing shortcut with the ID "my-shortcut".
    val pinShortcutInfo = ShortcutInfoCompat.Builder(context, "my-shortcut")
        .setShortLabel("Website")
        .setIntent(
            Intent(
                Intent.ACTION_VIEW,
                Uri.parse("https://www.mysite.example.com/")
            )
        )
        .build()

    // Create the PendingIntent object only if your app needs to be notified
    // that the user let the shortcut be pinned. If the pinning operation fails,
    // your app isn't notified. Assume here that the app implements a method
    // called createShortcutResultIntent() that returns a broadcast intent.
    val pinnedShortcutCallbackIntent =
        ShortcutManagerCompat.createShortcutResultIntent(context, pinShortcutInfo)

    // Configure the intent so that your app's broadcast receiver gets the
    // callback successfully. For details, see PendingIntent.getBroadcast().
    val successCallback = PendingIntent.getBroadcast(
        context, /* request code */ 0,
        pinnedShortcutCallbackIntent, /* flags */ PendingIntent.FLAG_IMMUTABLE
    )

    ShortcutManagerCompat.requestPinShortcut(
        context,
        pinShortcutInfo,
        successCallback.intentSender
    )
}

Как создать быструю команду

Специальное диалоговое окно с вопросом &quot;Добавить значок приложения Gmail на главный экран?&quot; Варианты: &quot;Нет&quot; и &quot;Добавить значок&quot;.
Рисунок 2. Пример диалогового окна для создания ярлыка приложения.

Вы также можете создать специальное действие, которое поможет пользователям создавать ярлыки с настраиваемыми параметрами и кнопкой подтверждения. На рисунке 2 показан пример такого действия в приложении Gmail.

В файле манифеста приложения добавьте ACTION_CREATE_SHORTCUT в элемент <intent-filter> объекта activity. Это объявление настраивает следующее поведение, когда пользователь пытается создать ярлык:

  1. Система запускает специализированный объект activity вашего приложения.
  2. Пользователь задает параметры ярлыка.
  3. Пользователь нажимает кнопку подтверждения.
  4. Приложение создает ярлык с помощью метода createShortcutResultIntent(). Этот метод возвращает объект Intent, который ваше приложение передает обратно в ранее выполнявшееся действие с помощью метода setResult().
  5. Приложение вызывает finish() для действия, которое используется для создания ярлыка.

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

Протестируйте сочетания клавиш

Чтобы протестировать ярлыки, установите приложение на устройство с панелью запуска, которая поддерживает ярлыки. Затем выполните следующие действия:

  • Нажмите и удерживайте значок приложения, чтобы посмотреть ярлыки, которые вы для него задали.
  • Перетащите ярлык, чтобы закрепить его на панели запуска устройства.