Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Всем привет! Разберёмся, что нам несёт грядущее обновление Android 13. В этом помогу я — Алексей Рябков, Android-тимлид в Surf.
Для начала давайте поймём, как называть эту версию. На десятом Android Google перестал давать версиям «съедобные» названия. Но, как говорят, даже внутри компании сотрудники между собой не использовали числовые версии, а придумывали новые — вкусные. Так или иначе, теперь Android 13 называется Тирамису. Вот и всё, живите с этим.
У Тирамису доступна уже третья бета-версия. По моим ощущениям, последние билды очень даже неплохие. В бетках двенадцатой версии, например, были поломанные анимации, зависания и прочие неприятные штуки, а с Android 13 всё работает круто и без проблем.
А теперь переходим к изменениям.
Новые разрешения
Небольшая предыстория: система развивалась, становилась популярной. Пользователи устанавливали всё больше и больше приложений, приложения слали пуши после установки, и шторка уведомлений часто оказывалась заспамлена.
Google озаботился проблемой и начал искать способы это пофиксить. Он стал разделять пуши по каналам, от которых можно было отключаться. Но, как выяснилось, подавляющее большинство пользователей не знали про эту фичу или не понимали, как ей воспользоваться. Поэтому Google пошёл на кардинальные меры: теперь пользователь выдаёт доступ к пушам каждому приложению. Появляется диалог с просьбой дать доступ разрешению POST_NOTIFICATIONS
. Диалог, кстати, стал выглядеть симпатично.
Добавляется новая группа разрешений NEARBY_DEVICES
для приложений, которые управляют подключениями устройства к близлежащим точкам доступа по Wi-Fi. Скорее всего, это будет использоваться в основном для организации работы умного дома и для взаимодействия с ближайшими устройствами: распечатать что-нибудь на принтере, перенести видео в приложении с телефона на телевизор и так далее.
Добавляется возможность получить разрешение для чтения только конкретного типа файлов на устройстве: картинок, видео и аудио. Раньше разрешение давалось для всех файлов при помощи READ_EXTERNAL_STORAGE
. Теперь для большей прозрачности следует использовать READ_MEDIA_IMAGES
, READ_MEDIA_VIDEO
, READ_MEDIA_AUDIO
. Причём если разрешения READ_MEDIA_IMAGE
и READ_MEDIA_VIDEO
запрашиваются одновременно, появится только один диалог с просьбой дать аппрув. Удобно.
У разработчиков появится способ отозвать уже выданное разрешение: это сделано ради конфиденциальности. Нужно передать название пермишена в метод revokeOwnPermissionOnKill(..)
, и разрешение будет отозвано.
TARE: ничего не понятно, но очень интересно
Мы вступаем на неизведанную территорию: про этот пункт ничего не сказано в официальном пресс-релизе. Почти все данные, что есть, основаны на домыслах и слитой информации.
В новой версии в разделе настроек для разработчиков добавился новый пункт — TARE. Это аббревиатура от «The Android Resource Economy». TARE в первую очередь фокусируется на управлении энергопотреблением на устройстве. Функция работает с помощью политик AlarmManager и JobScheduler.
TARE предоставляет приложениям «Кредиты ресурсов Android» — «валюту», привязанную к уровню заряда батареи устройства. Система будет «присуждать» кредиты в зависимости от того, насколько разряжена батарея. Приложения могут использовать эти кредиты в качестве «платежей» за возможность выполнять задачи.
По сути система в зависимости от уровня заряда батареи и потребностей приложения будет устанавливать ограничения на количество задач, которые приложение может планировать с помощью JobScheduler и AlarmManager. Но в подробностях понять всё это очень сложно. Ждём, когда Google выпустит документацию.
Изменения UI
Язык. Долгожданная для некоторых фича: возможность устанавливать отдельным приложениям язык, отличный от языка системы. Правда, для этого приложение должно иметь поддержку других языков (спасибо, кэп!).
Нет необходимости отравлять пользователя в настройки: можно использовать собственный пикер языка внутри приложения. Чтобы получить текущий предпочтительный язык, используйте метод
mContext.getSystemService(LocaleManager.class).getApplicationLocales();
.
А для установки языка — метод mContext.getSystemService(LocaleManager.class).setApplicationLocales(newLocaleList(Locale.forLanguageTag("xx-YY")));
.
Иконка для тёмной темы. Теперь у приложения может быть другая иконка для тёмной темы. Чтобы фича поддерживалась, необходимо, чтобы приложение имело такую иконку (спасибо, кэп!), функция была включена в системе (свичер на гифке) и чтобы сам лаунчер её поддерживал.
Быстрые настройки. Хорошая новость для утилитарных приложений: появилась возможность добавить карточку приложения. Будет удобнее менять некоторые настройки или совершать быстрые действия благодаря новому API: можно добавить карточку в одно действие, не покидая приложение.
Отображение текста. Компании стараются работать с иностранными проектами, поэтому о таких обновлениях имеет смысл упомянуть. Для японского языка обновили логику переноса слов.
Для не латинских языков починили отображение текста. На скрине заметно, что раньше часть символов обрезалась снизу.
Выбор фотографий. Добавили поддержку нового инструмента выбора фотографий. Он даёт пользователям безопасный способ выбора медиафайлов без необходимости предоставлять приложению доступ ко всей медиатеке. Можно выбирать одно фото или несколько, а также устанавливать максимальное число фотографий для выбора благодаря MediaStore.EXTRA_PICK_IMAGES_MAX
.
val intent = Intent(MediaStore.ACTION_PICK_IMAGES)
В конечном счёте выбор фото будет выглядеть на разных устройствах одинаково: это хорошо с точки зрения консистентности системы. Обновлённый пикер поставляется с обновлением сервисов Google Play, так что он будет поддерживаться на устройствах с версией от 11 и новее.
Создание графики. Добавляется поддержка программируемых объектов RuntimeShader. Это даст возможность рисовать сложную графику и дополнительно накладывать на неё эффекты.
Обновление жеста «Назад». Согласно документации, новый жест позволит пользователям увидеть пункт назначения до того, как они завершат свайп. Очень напоминает то, как сейчас работает прокрутка вверх, чтобы вернуться на главный экран. Полноценно жест станет доступен разработчикам после выхода Тирамису в релиз, а с API 34 его поддержка будет обязательной.
Прочие изменения
Google обновил API для класса AudioManager: система укажет приложениям, какие аудиоформаты может воспроизводить и отображать на устройстве. Также станет возможно получать список устройств для воспроизведения звука.
Источники:
Официальная документация.
Обзор от XDA.
Google I/O 2022.
Лучшие практики для работы приложений в фоне.