Android 12: пристальный разбор главных фич

Разбираем в деталях все отличия Android 12 от Android 11
7 минут9101

Недавно вышла стабильная версия новой операционной системы, а это значит, что её уже  можно установить на смартфон и «потрогать». Это ли не повод рассмотреть Android 12 пристальнее? 

Самые значительные изменения коснулись визуальной части операционной системы и её разрешений (permissions). Были представлены Material You в качестве обновленного дизайна и дополнительные меры для защиты данных пользователя. Давайте посмотрим, что это значит для простого пользователя и для разработчика.

Новый дизайн — Material You

Учитывая новый дизайн операционной системы Material You, интересно то, как вендоры со своими лаунчерами и разработчики приложений адаптируют новый подход. Вполне допускаем, что эта концепция так и останется только на девайсах с чистым Android и не выйдет за рамки приложений от Google. Возможно, что переход на новый UI займет несколько лет.

Splash Screen API — анимированный переход в приложения

Example of a splash screen

С новой версии появляется стандартный 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 12 device location

В 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).

программированиеразработкаandroid
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!