Недавно вышла стабильная версия новой операционной системы, а это значит, что её уже можно установить на смартфон и «потрогать». Это ли не повод рассмотреть Android 12 пристальнее?
Самые значительные изменения коснулись визуальной части операционной системы и её разрешений (permissions). Были представлены Material You в качестве обновленного дизайна и дополнительные меры для защиты данных пользователя.
Давайте посмотрим, что это значит для простого пользователя и для разработчика.Новый дизайн — Material You
Учитывая новый дизайн операционной системы Material You, интересно то, как вендоры со своими лаунчерами и разработчики приложений адаптируют новый подход. Вполне допускаем, что эта концепция так и останется только на девайсах с чистым Android и не выйдет за рамки приложений от Google. Возможно, что переход на новый UI займет несколько лет.
Splash Screen API — анимированный переход в приложения
С новой версии появляется стандартный Splash Screen, который будет анимировать открытие вашего приложения из лаунчера. С помощью нового API можно будет видоизменить стандартный Splash Screen под ваши нужны: добавить собственный фон, анимированную иконку и другие параметры. Отключить Splash Screen нельзя, если у вас есть своя вариация такого экрана — обратите внимание на фичу. Придётся переходить на стандартный экран со своими косметическими добавлениями. О том, как именно можно модифицировать стандартный экран загрузки — читайте в официальной документации.
Анимация действий пользователя
Обновление дизайна затронуло многие аспекты системы. Обновился даже Ripple Effect — это эффект нажатия на кнопку, когда вокруг пальца расходятся круги от нажатия. Также обновился overscroll-эффект, который показывается при достижении границы списков в конце скролла. Теперь список растягивается:
Больше визуальных эффектов с помощью Render Effect
В Android 12 появился новый API Render Effect. С его помощью можно будет довольно просто сделать эффект размытия фотографии или заднего фона, цветовые палитры и другие графические эффекты. Теперь добиться размытия заднего фона можно всего лишь одной строчкой API:
view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))
Новый API будет поддерживаться только теми устройствами, которым будет хватать вычислительных мощностей. Все эти дизайнерские изменения всё больше сближают визуальные стили двух мобильных операционных систем (ОС) — iOS и Android.
Новые возможности виджетов
Также в новой ОС значительно переработали виджеты рабочего стола. Теперь появились несколько новых интересных возможностей:
- динамический цвета системы можно использовать в качестве главного цвета,
- начальная настройка виджета стала необязательной,
- добавлена поддержка checkbox, switch, radiobutton.
На превью виджета теперь можно ставить не только статическую картинку, но и верстать макет в xml и добавлять описание. Более подробно о нововведениях можно почитать в официальной документации.
Rounded Corner API быстро расскажет о радиусе экрана
Позволит вам получить информацию о дисплеях с закругленными краями экрана. Таких дисплеев становится всё больше и часто часть контента перекрывается или теряется, если контент находится прямо в углу экрана такого смартфона. Тут вам поможет метод WindowInsets.getRoundedCorner(int position), у которого можно запросить радиус скругления по углам экрана.
// Получаем верхний правый угол у WindowInsets. final WindowInsets insets = getRootWindowInsets(); final RoundedCorner topRight = insets.getRoundedCorner(POSITION_TOP_RIGHT); if (topRight == null) { return; }
Rich content insertion — единый инструмент для вставки контента
Обмен контента между разными приложениями — очень важная возможность любой операционной системы. Теперь Google упрощает разработчикам жизнь: вместо трёх разных способов для вставки контента (через drag-and-drop, из клавиатуры и буфера обмена) вы можете использовать Rich Content Insertion API.
Новые возможности уведомлений
Расширен функционал уведомлений. При создании уведомления в BigPictureStyle и MessagingStyle теперь можно задавать анимированные картинки. Действия над уведомлениями могут требовать обязательной авторизации пользователей перед тем как, например, открыть экран какого-то приложения. Также через шторку уведомлений можно задавать приоритет для входящих звонков. Полностью запретили открытие активити из уведомления, первые шаги к этому были сделаны ещё в 10 версии ОС. Теперь это нужно делать не напрямую, а через Broadcastreceiver, из которого уже открываются экраны.
Performance Class — новый стандарт для всех смартфонов
Это системный класс, он описывает набор возможностей устройства, на которое устанавливается ваше приложение. Разработчики могут проверить текущий класс производительности и изменить настройки своего приложения для оптимальной работы на конкретном устройстве. Класс 12 будет опубликован вместе с релизом Android 12. Он будет включать определённые требования, например: проигрывание видео в высоком разрешении, возможности съёмки контента, характеристики дисплея, скорость чтения-записи на диск, характеристики оперативной памяти.
HapticGenerator — виброотдача на основе аудиопотока
Одна из интересных пользовательских функций новой версии Android — это виброотдача на основе аудиопотока. То есть телефон вибрирует в ритм с музыкой или с тем, что происходит в игре. Это дает еще больше погружения в музыку или игру. Чтобы использовать эту возможность, изучите соответствующее API – HapticGenerator.
Пользователи смогут контролировать передачу данных о геолокации
В Android 10 и 11 появилась возможность давать доступ к геолокации только во время использования приложения. Или только один раз. Как выяснилось, такую возможность используют более 80% пользователей. Поэтому Google решил развить идею контроля пользователем доступа приложений к местоположению. Теперь будет явное разделение на точную и примерную (coarse/fine) геолокацию. То есть при запросе точной геолокации пользователь может отказать в доступе, но выдать доступ к примерному местоположению. Если вам всё же нужно точное местоположение пользователя, а пользователь ранее выдал доступ только на примерное, то при повторном запросе будет предложено дать вам доступ только на точное местоположение. Все эти нововведения будут действовать только для приложений начиная с SDK 31 (Android 12), то есть время на доработку своих приложений у вас будет.
Про Bluetooth Scan и Bluetooth Connect
В текущих версиях Android, если вы хотите сканировать устройства поблизости с вами на основе Bluetooth, то вам приходится запрашивать разрешение на доступ к местоположению. Это порой приводит пользователей в недоумение. Ситуация будет исправлена с помощью новых разрешений — Bluetooth Scan и Bluetooth Connect. Bluetooth Scan используется для доступа в случае поиска Bluetooth устройства. А Bluetooth connect — когда нужно подключиться к устройству, которое уже сохранено. Если на основе сканирования вам всё также будет нужен доступ к местоположению, то без запроса доступа к геолокации не обойтись.
Чтобы использовать AlarmManager, нужно получить разрешение
Выполнение операции в заданное время в Android — боль любого разработчика. Чаще всего для этого используется AlarmManager. Но каждый из вендоров делает свои оптимизации энергопотребления и, как следствие, роботы AlarmManager’а. Поэтому в каждом лаунчере могут быть свои настройки для этой опции. Из-за этого часто приходится делать для каждого типа устройств инструкцию, объясняя как включить или отключить эту опцию.
В Android 12 появляется новое разрешение: schedule exact alarm. Без его получения теперь невозможно будет создать alarm в AlarmManager'е. Если такое разрешение не получить заранее, то будет выбрасываться SecurityException. При этом приложения должны использовать новые алармы только если это является критическим функционалом. Например, если это будильники или таймеры. А также приложение, которое содержит функционал с требованием, будет вызываться в точное время.
Буфер обмена под защитой ОС
Теперь операционная система будет следить за доступом к буферу обмена аналогично iOS. Когда фоновое приложение попытается откуда-то получить данные, то вам покажется toast с уведомлением, что приложение скопировало данные. Это хорошее нововведение для пользователя. Можно понимать, кто сейчас работает с вашим буфером обмена, потому в нём могут оказаться любые частные данные, включая пароли.
Задержка уведомлений при выполнении фоновой работы
Главные изменения Android 10 и 12, которые доставят больше всего работы Android-разработчикам по адаптации приложений — это запрет на запуск сервисов из фона. Если вы не используете сервисы — стоит знать, что в случае неудачной попытки запуска сервиса, приложение будет падать новым исключением ForegroundServiceStartNotAllowedException.
Теперь о том, что изменилось в 12 версии ОС. Часто так бывает, что push в System Bar’е может отображаться долю секунды, пока идет какая-то фоновая работа. И пользователь даже не понимает, какое приложение и что делает. Такие мимолетные уведомления — это следствие запрета на фоновую работу, даже если она выполняется меньше секунды. Но разработчики вынуждены отображать уведомление, даже если оно провисит всего мгновение.
Суть текущего изменения: если фоновый сервис выполняется менее 10 секунд, то уведомление не отображается. Есть исключения, при которых уведомление отображается сразу:
- в уведомлении есть какие-то кнопки с действием для пользователя,
- сервису присвоен тип mediaPlayback, mediaProjection или phoneCall,
- разработчик явно указал, что уведомление не должно откладываться и его нужно отобразить сразу после запуска сервиса. В NotificationBuilder нужно вызвать метод setForegroundServiceBehavior и передать туда флаг FOREGROUND_SERVICE_IMMEDIATE.
Управление камерой и микрофоном
Еще одно нововведение для шторки уведомлений — если приложение использует камеру или микрофон, то в statusbar’е справа будет появляться индикатор, который не позволит делать свернутому приложению что-то без уведомления пользователя.
Более того, пользователь в любой момент сможет отключить доступ к камере и микрофону абсолютно всем приложениям в системе. Для этого есть отдельные иконки в шторке уведомлений:
Также у пользователя будет доступ к privacy dashboard — истории обращения приложениями к местоположению, микрофону и камере:
Гибернация приложений
Если пользователь долго не взаимодействует с вашим приложением, например, несколько месяцев, то система сбросит все полученные разрешения и отправит его в гибернацию. Что это значит:
- кэш будет очищен,
- приложение не сможет запускать джобы или алерты в фоне,
- приложение не будет получать пуши, включая high priority-пуши.
После одного взаимодействия с вашим приложением все ограничения будут сняты. Но разработчику нужно будет заново создать джобы, алармы и все уведомления, которые необходимы. Поведение схоже с тем, когда пользователь принудительно останавливает приложения в настройках (Stop application).