Android all apps shortcut

Android N’s App Shortcuts

Android N introduced many new powerful features out of which I would like to talk about a simple, yet very useful one: “App Shortcuts”. Available from Android API version 25, App shortcuts help users to perform a specific action within the app, from outside the app.

Performing a long-tap on the app’s launcher icon will display the list of App shortcuts and each of them can be added to home-screen as an individual launcher icon.

Android provides two types of App shortcuts:

1. Static Shortcuts:

Static shortcuts are published when the app is installed, hence they remain constant throughout the app. Static shortcuts are immutable which means that their icons, description and the Intent it launches cannot be changed without updating to a new version of the app.

Static shortcuts are used for generic actions of the app that remain persistent over the lifetime of your app’s current version.

Examples: scan a QR code, view shopping cart, start a new game.

2. Dynamic Shortcuts:

Dynamic shortcuts are created, updated and removed during run-time of your app.

Dynamic shortcuts are used to provide specific, context-sensitive actions within your app, that could change with the user or based on user’s interactions within the app.

Examples: translate from a specific language, call a specific person, go to a specific channel on YouTube.

Implementing App Shortcuts

Static Shortcuts

To define Static shortcuts, create a resource file under ‘res/xml’ with an arbitrary name, say ‘shortcuts.xml’ and define all the app’s shortcuts with their icons, description and the Intent that it should launch within the app.

Add a meta-data tag to your launcher Activity in the manifest and provide the shortcuts resource file.

If you have multiple shortcuts launching the same Activity, then to differentiate between the actions that needs to be performed, define an extra for the Intent in ‘ shortcuts.xml’ and check for this value in your Activity.

Dynamic Shortcuts

The ShortcutManager API provides methods to publish, update and remove shortcuts dynamically. Each shortcut can be defined using ShortcutInfo which provides the UI information of the shortcut.

Using setDynamicShortcuts() updates the entire list of Dynamic shortcuts. If you want to just add another element to the existing list, use addDynamicShortcuts () . To update the existing Dynamic shortcut, use the method updateShortcuts () .

Please note that the call to set, add and update Dynamic shortcuts using ShortcutManager is rate-limited, when the app is not in foreground. This means that if the rate-limit is exceeded, calling these API will return false. Hence, before performing an action, check if the rate-limiting is active using isRateLimitingActive() method.

When the app is upgraded, the Dynamic shortcuts that are not pinned to home screen are not retained. Hence, the app must restore them if necessary.

Читайте также:  Как удалять временные файлы андроид

Handling User Navigation

When the user launches the app via a shortcut and then decides to press back button, then the app might be closed abruptly. To avoid this and create a user friendly navigation and retain the users in the app, you can launch multiple Intents (in the order with the last one on top) for both Static and Dynamic shortcuts.

  • For Static shortcuts multiple Intents can be defined in ‘shortcuts.xml’.

The first Intent will always have FLAG_ACTIVITY_NEW_TASK and FLAG_ACTIVITY_CLEAR_TASK set. This means that the existing activities will be destroyed when a Static shortcut is launched.

  • The same can be achieved with Dynamic shortcuts using setIntents(Intent[])method .

Typically, FLAG_ACTIVITY_CLEAR_TASK is defined so that the new target Activity is brought to front.

Best practices:

  • Use at most 4 App shortcuts, including static and dynamic ones, for a better user experience.
  • Disable the Dynamic shortcuts that are no longer valid using disableShortcuts(shortcut, errorMessage) . If the user has already pinned the shortcuts on the home screen, then the error message will be displayed.
  • Invoke reportShortcutUsed(String) every time the shortcut action is performed in the app. This is used by the Launcher applications to predict which shortcuts will most likely be used at a given time by examining the shortcut usage history data.
  • Use vector drawablesfor icons, so that they are scaled for different dimensions automatically. Except if you are using avatars, use PNG and provide image for all dimensions.
  • Keep the descriptions short, specific and meaningful. Do not exceed 10 characters for short description and 25 characters for long description.
  • Dynamic shortcuts by default appear on top of the Static ones. The order of Dynamic shortcuts can be changed by changing the ‘ Rank’ of the shortcut using ShortcutInfo.Builder().setRank() .
  • When the system locale changes, update the icon’s description. Keep in mind that Android 7.0 supports multi-locale.

Testing:

To test App shortcuts you would need Android version 7.1, with supported launcher(like the Nexus or Pixel launcher). A preview image can be easily setup on a rooted device or you can use an emulator, as described in detail here.

To conclude, App shortcuts are a great way to provide quick and easy access to the app’s common and recommended points within the app. Reducing the number of taps is always something the user will love about your app. Users are excited about Android N and its time to make the most of it and let the heavy users of your app enjoy the cool new features.

The complete source code can be found in my GitHub repository . I would love to hear your thoughts on the article. If you have any questions, feel free to leave a comment.

Источник

Изучаем App Shortcuts в Android Nougat 7.1

Привет Хабр! Предлагаю вашему вниманию свободный перевод статьи «Exploring Android Nougat 7.1 App Shortcuts» от Andrei Catinean.

Google выпустил Android Nougat с версией 7.1 (API 25). Появились некоторые интересные функции под капотом. Одна из этих дополнительных функций — app shortcuts. Эта статья расскажет, что они собой представляют, как они работают, и как вы можете их реализовать.

Читайте также:  Автомагнитола для duster 2 din с навигацией андроид

Конечный результат выглядит так:

Что такое App Shortcuts и зачем они нужны?

Ярлыки приложений — это средство изображения общих действий или задач вашего приложения на главном экране пользователя. Ваши пользователи могут раскрыть ярлыки при долгом нажатии запуска программы. С технической точки зрения, ярлыки приложений — это простой и быстрый способ использования intents.

Они бывают двух типов:

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

Добавление ярлыков

Добавление ярлыков в ваше приложение довольно просто. Начнем с создания простого статического ярлыка.

STATIC SHORTCUTS

В этом примере предполагается, что у вас уже создан проект в Android Studio.
Перейдите в AndroidManifest.xml и добавьте следующий тег метаданных в свою основную активность:

В теге meta-data ключ android:resource соответствует ресурсу, определенному в файле res / xml / shortcuts.xml. Здесь вам нужно определить все ваши статические ярлыки. Давайте добавим тот, который откроет определенную активность из вашего приложения.

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

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

  • enabled: Как указано в названии, включен ли ярлык или нет. Если вы решите отключить статический ярлык, вы можете либо установить значение false, либо просто удалить его из набора .
  • icon: значок, который будет показан в левой части ярлыка.
  • shortcutDisabledMessage: это строка, которая будет показана пользователю, если он попытается запустить отключенный ярлык. Прим. переводчика: Такое может произойти, когда ярлык не убрали с главного экрана устройства.
  • shortcutLongLabel: это более длинный вариант описания ярлыка, который отображается, когда имеется достаточно места.
  • shortcutShortLabel: краткое описание ярлыка. Данное поле является обязательным. Это текст ярлыка, который пользователь увидит на своем главном экране.
  • intent: здесь вы определяете свое намерение (или несколько намерений), которое ваш ярлык откроется при нажатии.

Вот как этот ярлык будет отображаться пользователю вашего приложения:

Просто и понятно, но если вы это реализуете, то вы можете заметить, что при нажатии на кнопку «назад» пользователь возвращается на домашний экран.

Как насчет того, чтобы вместо этого перейти в приложение? Для этого мы можем добавить несколько intent-тэгов в ярлыках, которые мы ранее создали:

Обратите внимание, как мы добавили дополнительный до того, что у нас было, указав на MainActivity. Это создаст back stack намерений, последний из которых будет открыт ярлыком. В нашем случае back stack выглядит как MainActivity → Static ShortcutActivity, поэтому при нажатии назад пользователь переходит в MainActivity:

Добавление статических ярлыков довольно просто. Давайте перейдем к динамическим.

DYNAMIC SHORTCUTS

Как следует из их названия, динамические ярлыки могут быть изменены во время выполнения без необходимости повторного открытия вашего приложения. Как вы могли догадаться, они не определяются через статический ресурс ( shortcuts.xml ), как статические, но создаются в коде.

Читайте также:  Ядро для amlogic android

Давайте добавим наш первый динамический ярлык! Для этого вам нужно будет использовать ShortcutManager и ShortcutInfo.Builder. Я буду создавать первый динамический ярлык в моей MainActivity.#OnCreate ():

В приведенном выше примере мы используем shortcutManager и создаем ShortcutInfo. Используя ShortcutInfo.Builder, мы можем установить различные свойства для ярлыка, который мы хотим создать. Все методы, которые мы используем выше, соответствуют тем же, что и для статического ярлыка. Однако одно свойство, которое является немного неясным, является идентификатором ярлыка, который определен в конструкторе StaticInfo.Builder как второй параметр — shortcut_web. В приведенном выше примере я определил намерение, которое откроет мой сайт. Наконец, я установил динамический ярлык в ShortcutManager. Посмотрим теперь, как выглядят наши ярлыки:

Круто! Теперь у нас есть 2 быстрых ярлыка в нашем приложении — один статический и одий динамический.

Давайте добавим еще один, который укажет на активность внутри приложения и посмотрим, как мы можем создать для него back stack:

Вы можете видеть, что теперь мы создаем setIntents () в builder’е, чтобы построить back stack:

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

  • Второе соответствует DynamicShortcutActivity (пустая активность, которую я создал). Чтобы сделать это, нам нужно предоставить Intent конкретное действие, которое определяется как статическая String в DynamicShortcutActivity и соответствует имени действия intent-filter, определенному в AndroidManifest.xml для той же активности:
  • Объявив массив намерений в этом порядке, то гарантируем, что когда пользователь вернется после открытия DynamicShortcutActivity, то MainActivity будет открыт.

    Как это выглядит:

    SHORTCUT ORDERING

    Теперь, когда у нас есть 1 статический ярлык и 2 динамических, как мы можем задать для них порядок? Если мы более подробно рассмотрим методы ShortcutInfo.Builder, в частности: setRank (int). Установив настраиваемый ранг в динамический ярлык, мы можем контролировать порядок, в котором они появляются: чем выше ранг, тем выше ярлык.

    В качестве примера, скажем, мы хотим, чтобы ярлык №2 (novoda.com) находился на вершине. Мы можем динамически изменять ряды уже добавленных динамических ярлыков. Давайте сделаем это, нажав кнопку в MainActivity:

    В слушателе кнопки мы создаем новый ShortcutInfo для каждого ярлыка, которые мы ранее добавляли с теми же идентификаторами, но теперь мы устанавливаем более высокий ранг в shortcut_web, а нижний — для shortcut_dynamic. Наконец, мы используем метод updateShortcuts (List ) для обновления ярлыков:

    Вы можете видеть из приведенной выше гифки, что статический ярлык находится внизу списка. Важное замечание: вы не можете изменить ранг статического ярлыка. Они будут показаны в том порядке, в котором они определены в файле shortcuts.xml. Поскольку у нас есть только один статический ярлык, он имеет ранг по умолчанию 0, который нельзя изменить.

    EXTRA BITS

    Если мы более подробно рассмотрим метод setShortLabel (CharSequence), мы увидим, что он принимает CharSequence в качестве параметра. Что это значит? Ну, это означает, что мы можем немного поиграть с ним 🙂

    Предположим, мы хотим изменить цвет на красный, нажав на созданную выше кнопку. Мы можем создать SpannableStringBuilder и установить для него ForegroundColorSpan требуемый цвет, а затем передать spannableStringBuilder как shortLabel (поскольку SpannableStringBuilder реализует CharSequence):

    Источник

    Оцените статью