После выхода лаунчера Pixel для Android 7.1, мы можем по-настоящему «взяться» за семёрку, и освоение некоторых новых особенностей незачем откладывать на потом.
Одной из особенностей, введения которой я ждал с большим нетерпением, является функция App Shortcuts (ранее также известная как Quickcuts). Эту функцию можно считать практически полным аналогом соответствующего решения для iOS под названием 3D Touch Quick Actions.
И хотя, строго говоря, в случае с Google Now и Pixel Launcher для работы данной функции необходим Android 7.1 или выше, в множество других лаунчеров уже добавлена поддержка ярлыков приложений, а они не требуют последней версии Android.
Согласно официальной документации Google об App Shortcut, мы имеем возможность создавать как статические, так и динамические ярлыки приложений. В этой статье мы рассмотрим только статические ярлыки, поскольку на момент её написания, обновление Xamarin, предназначенное обеспечить нас новыми API-интерфейсами для сознания динамических ярлыков, все ещё находится в разработке.
Статические ярлыки
Статические ярлыки объявляются в файле ресурсов и не могут быть изменены. Они всегда будут одинаково отображаться в списке ярлыков приложения. В случае со многими приложениями они оказываются очень полезными, и Вы, вероятно, будете использовать их в каждом проекте.
- Трюк с манифестом
Чтобы уже начинать работать, пока Xamarin.Android готовится получить обновление для поддержки уровня API 25, мы пойдём на небольшую уловку, выполнив некоторые манипуляции в нашем манифесте.
В элементе application Вашего AndroidManifest.xml измените или добавьте атрибут android:targetSdkVersion со значением 25.
- Объявите ярлыки
Статические ярлыки создаются в файле XML-ресурсов. Как правило, Вы создаёте вот такой файл: Resources\xml\shortcuts.xml. Формат у него довольно простой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?xml version="1.0" encoding="utf-8"?> <shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <shortcut android:enabled="true" android:icon="@drawable/icon" android:shortcutDisabledMessage="@string/shortcut_disabled_msg" android:shortcutId="shortcut-id" android:shortcutLongLabel="@string/shortcut_long_label" android:shortcutShortLabel="@string/shortcut_short_label"> <intent android:action="android.intent.action.VIEW" android:targetClass="com.mypackage.ShortcutActivity" android:targetPackage="com.mypackage" /> </shortcut> </shortcuts> |
Вы можете объявить несколько ярлыков в одном файле.
Каждый из Ваших ярлыков может также включать в себя нескольких элементов <intent .. />, которые будут использоваться в качестве стек переходов назад, когда пользователь задействует ярлык. Последний в списке элемент <intent .. /> окажется первым, увиденным пользователем при запуске ярлыка.
- Убедитесь, что у Вас правильный targetClass
На тот случай, если Вы ещё этого не знаете, поясним, что по умолчанию в Xamarin.Android Ваши Activities будут иметь свой сгенерированный посредством Java соответствующий код, названный с хэш-префиксом (по причинам, для объяснения которых не хватит места в этой статье). Таким образом, определять верный targetClass для использования в intent-декларации ярлыка бывает не так уж и легко, как можно было бы подумать.
К счастью, существует один простой обходной путь. В атрибуте [Activity] вы можете указать сгенерированное Java имя класса, напрямую обосновав Name свойства. Вам следует дать полные имена пакета и класса, например:
1 2 3 4 5 | [Activity (Name="com.mypackage.ShortcutActivity")] public class ShortcutActivity : Activity { // ... } |
- Сопоставьте shortcuts.xml с Main Activity
Теперь, когда вы создали файл XML-ресурсов ярлыка, необходимо связать его с Activity вашего приложения, которое обозначается как Main Launcher. Мы можем сделать это, просто добавив к Activity атрибут MetaData:
1 2 3 4 5 6 | [MetaData("android.app.shortcuts", Resource = "@xml/shortcuts")] [Activity(MainLauncher = true)] public class MainActivity : Activity { // ... } |
Готово. Теперь можно устанавливать приложение и тестировать Ваши App Shortcuts! Вот, собственно, и все, что нужно сделать.
Автор: Jonathan Dick
Источник: Блог автора
Написать ответ