Обзор функций и API

Android 12 представляет отличные новые функции и API для разработчиков. Разделы ниже помогут вам узнать о функциях ваших приложений и начать работу с соответствующими API.

Подробный список новых, измененных и удаленных API можно найти в отчете о различиях API . Подробную информацию о новых API см. в справочнике по API Android — новые API выделены для наглядности. Кроме того, чтобы узнать об областях, в которых изменения платформы могут повлиять на ваши приложения, обязательно ознакомьтесь с изменениями в поведении Android 12 для приложений, ориентированных на Android 12 , и для всех приложений .

Пользовательский опыт

Материальный ты

В Android 12 представлен новый язык дизайна Material You , который поможет вам создавать более персонализированные и красивые приложения. Чтобы использовать все последние обновления Material Design 3 в своих приложениях, попробуйте альфа-версию Material Design Components .

Материальный ты

Улучшения виджетов

В Android 12 обновляется существующий API виджетов, чтобы улучшить взаимодействие с пользователем и разработчиком на платформе и в средствах запуска. Мы создали руководство, которое поможет вам обеспечить совместимость вашего виджета с Android 12 и обновить его новыми функциями.

Дополнительную информацию см. в разделе «Улучшения виджетов Android 12» .

Вставка богатого контента

В Android 12 представлен новый унифицированный API, который позволяет вашему приложению получать разнообразный контент из любого доступного источника: буфера обмена, клавиатуры или перетаскивания.

Дополнительную информацию см. в разделе Получение расширенного контента .

API заставок приложений

В Android 12 представлена ​​новая анимация запуска приложения для всех приложений, которая включает движение в приложении с момента запуска, заставку, показывающую значок приложения, и переход к самому приложению. Дополнительные сведения см. в руководстве разработчика заставок .

API с закругленными углами

В Android 12 представлены RoundedCorner и WindowInsets.getRoundedCorner(int position) , которые определяют радиус и центральную точку для закругленных углов.

Дополнительную информацию см. в разделе Закругленные углы .

Богатый тактильный опыт

Android 12 расширяет инструменты для создания информативной тактильной обратной связи для событий пользовательского интерфейса, захватывающих и восхитительных эффектов для игр, а также тактильных ощущений для повышения производительности.

Эффекты актуатора

В Android 12 добавлены выразительные эффекты, такие как низкий тик , которые используют преимущества более широкой полосы частот новейших приводов. Разработчики игр теперь могут независимо получать доступ к нескольким различным исполнительным механизмам в игровых контроллерах, чтобы синхронно обеспечивать один и тот же эффект или разные тактильные эффекты на нескольких исполнительных механизмах. Разработчикам мы рекомендуем использовать константы и примитивы в качестве строительных блоков для богатых тактильных эффектов — константы для улучшения событий пользовательского интерфейса и тактильный композитор для упорядочивания примитивов для более сложных эффектов. Эти API-интерфейсы доступны для тестирования на устройствах Pixel 4, и мы продолжаем работать с нашими партнерами-производителями устройств, чтобы предоставить пользователям всей экосистемы новейшие возможности тактильной поддержки.

Тактильные эффекты, связанные со звуком

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

Дополнительную информацию см. в справочной документации HapticGenerator .

Поиск приложений

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

Диаграмма, иллюстрирующая индексирование и поиск в AppSearch

AppSearch существует в двух вариантах: локальный индекс для использования вашим приложением, совместимый со старыми версиями Android, или центральный индекс, поддерживаемый для всей системы в Android 12. Используя центральный индекс, ваше приложение может разрешить отображение своих данных на поверхностях пользовательского интерфейса системы с помощью предварительно установленного интеллектуального компонента системы. Какие именно данные отображаются на поверхностях системного пользовательского интерфейса, зависит от OEM-производителя. Кроме того, ваше приложение может безопасно обмениваться данными с другими приложениями, чтобы они также могли выполнять поиск по этим данным.

Узнайте больше о AppSearch в руководстве для разработчиков и начните использовать его с библиотекой AppSearch Jetpack , которая обеспечивает удобную для разработчиков поверхность API, а также поддержку процессора аннотаций.

Игровой режим

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

Дополнительную информацию см. в разделе Игровой режим .

Рекомендации и улучшения режима «Картинка в картинке» (PiP)

В Android 12 представлены следующие улучшения режима PiP:

Поддержка новых жестов PiP

Android 12 теперь поддерживает жесты сохранения и масштабирования для окна PiP:

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

  • Теперь пользователь может изменять размер окна PiP, используя масштабирование.

В Android 12 были внесены значительные косметические улучшения в анимированные переходы между полноэкранным режимом и окнами PiP. Мы настоятельно рекомендуем внести все применимые изменения; как только вы это сделаете, эти изменения автоматически масштабируются на большие экраны, такие как складные устройства и планшеты, без каких-либо дополнительных действий.

Эти особенности заключаются в следующем:

Новые уведомления о телефонных звонках, позволяющие ранжировать важность входящих звонков.

В Android 12 добавлен новый стиль уведомлений Notification.CallStyle для телефонных звонков. Использование этого шаблона позволяет вашему приложению указывать важность активных вызовов, отображая заметную метку, показывающую время вызова в строке состояния; пользователь может коснуться этого чипа, чтобы вернуться к разговору.

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

Реализуйте следующий код для всех типов вызовов.

Котлин

// Create a new call with the user as caller.
val incoming_caller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Ява

// Create a new call with the user as caller.
Person incoming_caller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

Используйте forIncomingCall() , чтобы создать уведомление о стиле вызова для входящего вызова.

Котлин

// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller)

Ява

// Create a call style notification for an incoming call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller);

Используйте forOngoingCall() , чтобы создать уведомление о стиле вызова для текущего вызова.

Котлин

// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller)

Ява

// Create a call style notification for an ongoing call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller);

Используйте forScreeningCall() , чтобы создать уведомление о стиле вызова для проверки вызова.

Котлин

// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller)

Ява

Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

Расширенная поддержка изображений для уведомлений.

В Android 12 теперь вы можете расширить возможности уведомлений вашего приложения, добавив анимированные изображения в уведомления MessagingStyle() и BigPictureStyle() . Кроме того, ваше приложение теперь может позволить пользователям отправлять графические сообщения, когда они отвечают на сообщения из панели уведомлений.

Улучшения режима погружения для навигации с помощью жестов.

Android 12 объединяет существующее поведение, чтобы пользователям было проще выполнять команды навигации с помощью жестов в режиме погружения . Кроме того, в Android 12 предусмотрена обратная совместимость для режима липкого погружения .

Общий доступ к недавним URL-адресам (только для Pixel)

На устройствах Pixel пользователи теперь могут делиться ссылками на недавно просмотренный веб-контент прямо с экрана «Последние». После посещения контента в приложении пользователь может перейти на экран «Недавние» и найти приложение, в котором он просматривал контент, а затем нажать кнопку ссылки, чтобы скопировать или поделиться URL-адресом.

Дополнительную информацию см. в разделе Включение общего доступа к URL-адресам последних страниц .

Безопасность и конфиденциальность

Панель конфиденциальности

Вертикальная временная шкала показывает различные приложения, которые          доступ к информации о местоположении и в какое время произошел доступ
Рис. 1. Экран использования местоположения, часть панели конфиденциальности.

На поддерживаемых устройствах под управлением Android 12 или более поздней версии в настройках системы появляется экран панели конфиденциальности. На этом экране пользователи могут получить доступ к отдельным экранам, которые показывают, когда приложения получают доступ к информации о местоположении, камере и микрофоне. На каждом экране отображается временная шкала, когда разные приложения получили доступ к определенному типу данных. На рис. 1 показана временная шкала доступа к данным о местоположении.

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

Разрешения Bluetooth

В Android 12 представлены разрешения BLUETOOTH_SCAN , BLUETOOTH_ADVERTISE и BLUETOOTH_CONNECT . Эти разрешения упрощают взаимодействие приложений, предназначенных для Android 12, с устройствами Bluetooth , особенно для приложений, которым не требуется доступ к местоположению устройства.

Обновите декларации разрешений Bluetooth вашего приложения.

Чтобы подготовить свое устройство к использованию Android 12 или более поздней версии, обновите логику приложения. Вместо объявления устаревшего набора разрешений Bluetooth объявите более современный набор разрешений Bluetooth .

Поиск группы разрешений

На Android 12 или более поздней версии вы можете узнать, как система распределяет разрешения , предоставляемые платформой, по группам разрешений:

  • Чтобы определить группу разрешений, в которую система поместила разрешение, определенное платформой, вызовите getGroupOfPlatformPermission() .
  • Чтобы определить определенные платформой разрешения, которые система поместила в определенную группу разрешений, вызовите getPlatformPermissionsForGroup() .

Скрыть окна наложения приложений

Чтобы дать разработчикам больше контроля над тем, что видят пользователи при взаимодействии с приложением разработчика, в Android 12 появилась возможность скрывать наложенные окна, отображаемые приложениями, имеющими разрешение SYSTEM_ALERT_WINDOW .

После объявления разрешения HIDE_OVERLAY_WINDOWS приложение может вызвать setHideOverlayWindows() , чтобы указать, что все окна типа TYPE_APPLICATION_OVERLAY должны быть скрыты, когда видно собственное окно приложения. Приложения могут сделать это при отображении конфиденциальных экранов, таких как потоки подтверждения транзакций.

Приложениям, отображающим окна типа TYPE_APPLICATION_OVERLAY следует рассмотреть альтернативы, которые могут быть более подходящими для их варианта использования, например «картинка в картинке» или «пузырьки» .

Флаг защиты разрешений известных подписантов

Начиная с Android 12, knownCerts для разрешений на уровне подписи позволяет ссылаться на дайджесты известных сертификатов подписи во время объявления.

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

Аттестация свойств устройства

В Android 12 расширяется набор приложений, которые могут проверять свойства устройства, указанные в сертификате аттестации, когда эти приложения генерируют новый ключ.

Начиная с Android 9 (уровень API 28), владельцы политик устройств (DPO) , использующие Keymaster 4.0 или более позднюю версию, могут проверять свойства устройства в этих сертификатах аттестации. Начиная с Android 12, любое приложение, предназначенное для Android 12 (уровень API 31) или выше, может выполнить эту проверку с помощью метода setDevicePropertiesAttestationIncluded() .

Сгенерированные свойства устройства включают следующие поля Build :

  • BRAND
  • DEVICE
  • MANUFACTURER
  • MODEL
  • PRODUCT

Безопасные действия по уведомлениям на экране блокировки

Начиная с Android 12, класс Notification.Action.Builder поддерживает метод setAuthenticationRequired() , который позволяет вашему приложению требовать, чтобы устройство было разблокировано, прежде чем ваше приложение вызовет определенное действие уведомления. Этот метод помогает добавить дополнительный уровень безопасности к уведомлениям на заблокированных устройствах.

Локализуемые строки для BiometricPrompt

В Android 12 представлены новые API, которые помогут вам улучшить взаимодействие с пользователем при биометрической аутентификации вашего приложения. Новый вложенный класс BiometricManager.Strings включает методы getButtonLabel() , getPromptMessage() и getSettingName() , которые позволяют вашему приложению получать удобочитаемую и локализованную метку кнопки, сообщение с подсказкой или имя настройки приложения. Используйте эти метки для создания более точных инструкций для пользователя, специфичных для используемых методов биометрической аутентификации, например «Используйте разблокировку лица» или «Используйте отпечаток пальца для продолжения».

Обнаружение фишинга в приложениях для обмена сообщениями (только Pixel)

Пользователь видит подобное сообщение при обнаружении подозрительного сообщения.

На поддерживаемых устройствах Pixel Android 12 обнаруживает фишинг в сообщениях, полученных в популярных приложениях для обмена сообщениями. Система использует машинное обучение на устройстве для обнаружения подозрительных действий. При обнаружении система отображает наложение безопасности поверх пользовательского интерфейса приложения для обмена сообщениями, чтобы предупредить пользователей. Например, обнаружение фишинга может предупредить пользователей о следующих потенциальных рисках:

  • Подозрительные запросы, например на отправку кода, денег и т.п.
  • Ненадежные URL-адреса
  • Вредоносные вложения
  • Ссылки на вредоносные приложения

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

Разработчики могут отказаться от этой функции, добавив новый тег метаданных, включающий строку com.google.android.ALLOW_PHISHING_DETECTION , в файлы манифеста своего приложения. Например:

<manifest>
    <application android:name="com.messagingapp">
        <meta-data android:name="com.google.android.ALLOW_PHISHING_DETECTION" android:value="false" />

    </application>
</manifest>

СМИ

Совместимое транскодирование мультимедиа

Начиная с Android 12 (уровень API 31), система может автоматически перекодировать видео HEVC (H.265) и HDR (HDR10 и HDR10+), записанные на устройстве, в AVC (H.264), формат, который широко совместим со стандартными проигрывателями. При этом используются преимущества современных кодеков, когда они доступны, без ущерба для совместимости со старыми приложениями.

Дополнительные сведения см. в разделе «Перекодирование совместимого мультимедиа» .

Класс производительности

В Android 12 представлен стандарт, называемый классом производительности . Класс производительности определяет возможности оборудования, выходящие за рамки базовых требований Android. Каждое устройство Android объявляет класс производительности, который оно поддерживает. Разработчики могут проверять класс производительности устройства во время выполнения и предоставлять обновленные возможности, позволяющие в полной мере использовать возможности устройства.

Дополнительную информацию см. в разделе «Класс производительности» .

Улучшения кодирования видео

Android 12 определяет стандартный набор клавиш для управления значением параметра квантования (QP) для кодирования видео, что позволяет разработчикам избегать кода, специфичного для конкретного поставщика.

Новые ключи доступны в API MediaFormat , а также в медиа-библиотеке NDK .

Начиная с Android 12, видеокодеры устанавливают минимальный порог качества. Это гарантирует, что пользователи не столкнутся с чрезвычайно низким качеством при кодировании видео с высокой сложностью сцены.

Аудио фокус

Начиная с Android 12 (уровень API 31), когда приложение запрашивает фокус звука, в то время как другое приложение имеет фокус и воспроизводится, система затухает воспроизводящее приложение.

Дополнительные сведения см. в разделе «Аудио фокус» в Android 12 и более поздних версиях .

Обновления МедиаДрм

Чтобы определить, требуется ли компонент безопасного декодера для текущих API MediaDrm , необходимо выполнить следующие шаги:

  1. Создайте MediaDrm .
  2. Откройте сеанс, чтобы получить идентификатор сеанса.
  3. Создайте MediaCrypto , используя идентификатор сеанса.
  4. Вызовите MediaCrypto.requiresSecureDecoderComponent(mimeType) .

С помощью новых методов requiresSecureDecoder(@NonNull String mime) и requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level) вы можете определить это, как только создадите MediaDrm .

Камера

Расширения поставщика Camera2

Многие из наших партнеров-производителей устройств создали собственные расширения камеры, такие как Bokeh, HDR, ночной режим и другие, которые они хотят, чтобы приложения использовали для создания дифференцированных возможностей на своих устройствах. Библиотека CameraX уже поддерживает эти пользовательские расширения поставщиков. В Android 12 эти расширения поставщиков теперь доступны непосредственно на платформе.

Это дополнение помогает приложениям со сложной реализацией Camera2 использовать преимущества расширений поставщиков без необходимости внесения существенных изменений в устаревший код. API-интерфейсы расширений Camera2 предоставляют точно такой же набор расширений, что и в CameraX, и они уже поддерживаются на многих различных устройствах , поэтому вы можете использовать их без какой-либо дополнительной настройки.

Дополнительные сведения см. в разделе CameraExtensionCharacteristics .

Поддержка четырехкамерного сенсора камеры

Многие Android-устройства сегодня поставляются с датчиками камеры сверхвысокого разрешения, обычно с шаблонами Quad или Nona Bayer, и они обеспечивают большую гибкость с точки зрения качества изображения и производительности при слабом освещении. В Android 12 представлены новые API-интерфейсы платформы, которые позволяют сторонним приложениям в полной мере использовать преимущества этих универсальных датчиков. Новые API поддерживают уникальное поведение этих датчиков и учитывают, что они могут поддерживать различные конфигурации и комбинации потоков при работе в режиме полного разрешения или «максимального разрешения» по сравнению с режимом «по умолчанию».

Графика и изображения

Предоставьте приложениям прямой доступ к следам надгробия

Начиная с Android 12, вы можете получить доступ к собственному надгробию вашего приложения в качестве буфера протокола с помощью метода ApplicationExitInfo.getTraceInputStream() . Буфер протокола сериализуется с использованием этой схемы . Раньше единственным способом получить доступ к этой информации был через Android Debug Bridge (adb).

Дополнительные сведения см. в разделе Предоставление приложениям прямого доступа к следам захоронения.

Поддержка изображений AVIF

В Android 12 представлена ​​поддержка изображений, использующих формат файлов изображений AV1 (AVIF). AVIF — это формат контейнера для изображений и последовательностей изображений, закодированных с использованием AV1. AVIF использует преимущества внутрикадрового кодирования контента при сжатии видео. Это значительно улучшает качество изображения при том же размере файла по сравнению со старыми форматами изображений, такими как JPEG. Подробную информацию о преимуществах этого формата можно найти в блоге Джейка Арчибальда.

Упрощенное размытие, цветовые фильтры и другие эффекты.

В Android 12 добавлен новый RenderEffect , который применяет общие графические эффекты, такие как размытие, цветовые фильтры, эффекты шейдеров Android и многое другое, к View и иерархиям рендеринга. Эффекты можно комбинировать либо как цепные эффекты (которые составляют внутренний и внешний эффект), либо как смешанные эффекты. Различные устройства Android могут поддерживать или не поддерживать эту функцию из-за ограниченной вычислительной мощности.

Эффекты также можно применять к базовому RenderNode для View путем вызова View.setRenderEffect(RenderEffect) .

Чтобы реализовать RenderEffect :

view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))

Собственное декодирование анимированных изображений

В Android 12 API NDK ImageDecoder был расширен для декодирования всех кадров и данных синхронизации из изображений, которые используют форматы анимированных файлов GIF и анимированных WebP . Когда этот API был представлен в Android 11, он декодировал только первое изображение анимации в этих форматах.

Используйте ImageDecoder вместо сторонних библиотек, чтобы еще больше уменьшить размер APK и воспользоваться будущими обновлениями, связанными с безопасностью и производительностью.

Дополнительные сведения об API см. в справочнике по API и образце на GitHub .

Возможности подключения

Не позволяйте сопутствующим приложениям активизироваться

Чтобы обеспечить бесперебойную работу сопутствующих приложений для управления устройством, в Android 12 представлены API, которые выполняют следующие действия:

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

Чтобы использовать API, ваши устройства должны быть подключены с помощью Companion Device Manager . Дополнительные сведения см. в разделах CompanionDeviceManager.startObservingDevicePresence() и CompanionDeviceService.onDeviceAppeared() .

Профили диспетчера сопутствующих устройств

Диалоговое окно разрешений, в котором используется профиль сопутствующего устройства для запроса нескольких разрешений в одном запросе.

Партнерские приложения на Android 12 (уровень API 31) и выше могут использовать профили сопутствующих устройств при подключении к часам. Использование профиля упрощает процесс регистрации, объединяя предоставление набора разрешений для конкретного типа устройства в один шаг.

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

Дополнительные сведения см. в разделе AssociationRequest.Builder.setDeviceProfile() .

Улучшения оценки пропускной способности

В Android 12 возможности оценки пропускной способности, предоставляемые методами getLinkDownstreamBandwidthKbps() и getLinkUpstreamBandwidthKbps() улучшены как для Wi-Fi, так и для сотовой связи. Возвращаемые значения теперь представляют собой средневзвешенную пропускную способность пользователя за все время для каждого оператора связи или SSID Wi-Fi, типа сети и уровня сигнала для всех приложений на устройстве. Это может дать более точную и реалистичную оценку ожидаемой пропускной способности, предоставить оценки при холодном запуске приложения и требует меньшего количества циклов по сравнению с использованием других методов оценки пропускной способности.

Улучшения Wi-Fi Aware (NAN)

В Android 12 добавлены некоторые улучшения в Wi-Fi Aware:

  • На устройствах под управлением Android 12 (уровень API 31) и выше вы можете использовать обратный вызов onServiceLost() , чтобы получать оповещения, когда ваше приложение потеряло обнаруженную службу из-за остановки или выхода службы за пределы диапазона.
  • Способ настройки нескольких путей к данным (пути к данным NAN) меняется и становится более эффективным. Более ранние версии использовали обмен сообщениями L2 для обмена информацией об одноранговых узлах инициаторов, что приводило к задержке. На устройствах под управлением Android 12 и более поздних версий ответчик (сервер) можно настроить на прием любого узла, то есть ему не нужно заранее знать информацию об инициаторе. Это ускоряет создание канала передачи данных и позволяет использовать несколько каналов «точка-точка» с помощью всего одного сетевого запроса.
  • Чтобы платформа не отклоняла запросы на обнаружение или подключение из-за нехватки ресурсов, на устройствах под управлением Android 12 и более поздних версий вы можете вызвать WifiAwareManager.getAvailableAwareResources() . Возвращаемое значение этого метода позволяет получить количество доступных путей к данным, количество доступных сеансов публикации и количество доступных сеансов подписки.

Одновременная одноранговая сеть + подключение к Интернету

Когда устройства, ориентированные на Android 12 (уровень API 31) и выше, работают на устройствах с аппаратной поддержкой, использование одноранговых подключений не приведет к отключению существующего подключения Wi-Fi при создании подключения к одноранговому устройству. Чтобы проверить поддержку этой функции, используйте WifiManager.isMultiStaConcurrencySupported() .

Включить отключение экрана для платежей NFC

В приложениях, предназначенных для Android 12 и более поздних версий, вы можете включить платежи NFC без включения экрана устройства, задав для requireDeviceScreenOn значение false . Дополнительную информацию о платежах NFC с выключенным или заблокированным экраном см. в разделе «Отключение экрана и поведение экрана блокировки» .

Хранилище

В Android 12 представлены следующие возможности управления хранилищем:

Основная функциональность

Автоматические обновления приложений

В Android 12 представлен метод setRequireUserAction() для приложений, использующих API PackageInstaller . Этот метод позволяет приложениям-установщикам выполнять обновления приложений, не требуя от пользователя подтверждения действия.

Информация о чипсете устройства

В Android 12 в android.os.Build добавлены две константы, которые предоставляют информацию о поставщике чипсета SoC и модели через SDK. Вы можете получить эту информацию, вызвав Build.SOC_MANUFACTURER и Build.SOC_MODEL соответственно.

Обновления основных API Java

По просьбам и в сотрудничестве с разработчиками мы добавили в Android 12 следующие основные библиотеки:

Сорт API
java.lang.Deprecated
java.lang.Byte
java.lang.Short
java.lang.Math
java.lang.StrictMath
java.util.Set copyOf()
java.util.Map copyOf()
java.util.List copyOf()
java.time.Duration
java.time.LocalTime
,

В Android 12 представлены замечательные новые функции и API для разработчиков. Разделы ниже помогут вам узнать о функциях ваших приложений и начать работу с соответствующими API.

Подробный список новых, измененных и удаленных API можно найти в отчете о различиях API . Подробную информацию о новых API см. в справочнике по API Android — новые API выделены для наглядности. Кроме того, чтобы узнать об областях, в которых изменения платформы могут повлиять на ваши приложения, обязательно ознакомьтесь с изменениями в поведении Android 12 для приложений, ориентированных на Android 12 , и для всех приложений .

Пользовательский опыт

Материальный ты

В Android 12 представлен новый язык дизайна Material You , который поможет вам создавать более персонализированные и красивые приложения. Чтобы использовать все последние обновления Material Design 3 в своих приложениях, попробуйте альфа-версию Material Design Components .

Материальный ты

Улучшения виджетов

В Android 12 обновляется существующий API виджетов, чтобы улучшить взаимодействие с пользователем и разработчиком на платформе и в средствах запуска. Мы создали руководство, которое поможет вам обеспечить совместимость вашего виджета с Android 12 и обновить его новыми функциями.

Дополнительную информацию см. в разделе «Улучшения виджетов Android 12» .

Вставка богатого контента

В Android 12 представлен новый унифицированный API, который позволяет вашему приложению получать разнообразный контент из любого доступного источника: буфера обмена, клавиатуры или перетаскивания.

Дополнительную информацию см. в разделе Получение расширенного контента .

API заставок приложений

В Android 12 представлена ​​новая анимация запуска для всех приложений, которая включает в себя движение внутри приложения с момента запуска, заставку, показывающую значок приложения, и переход к самому приложению. Дополнительные сведения см. в руководстве разработчика заставок .

API с закругленными углами

В Android 12 представлены RoundedCorner и WindowInsets.getRoundedCorner(int position) , которые определяют радиус и центральную точку для закругленных углов.

Дополнительную информацию см. в разделе Закругленные углы .

Богатый тактильный опыт

Android 12 расширяет инструменты для создания информативной тактильной обратной связи для событий пользовательского интерфейса, захватывающих и восхитительных эффектов для игр, а также тактильных ощущений для повышения производительности.

Эффекты актуатора

В Android 12 добавлены выразительные эффекты, такие как низкий тик , которые используют преимущества более широкой полосы частот новейших приводов. Разработчики игр теперь могут независимо получать доступ к нескольким различным исполнительным механизмам в игровых контроллерах, чтобы синхронно обеспечивать один и тот же эффект или разные тактильные эффекты на нескольких исполнительных механизмах. Разработчикам мы рекомендуем использовать константы и примитивы в качестве строительных блоков для богатых тактильных эффектов — константы для улучшения событий пользовательского интерфейса и тактильный композитор для упорядочивания примитивов для более сложных эффектов. Эти API-интерфейсы доступны для тестирования на устройствах Pixel 4, и мы продолжаем работать с нашими партнерами-производителями устройств, чтобы предоставить пользователям всей экосистемы новейшие возможности тактильной поддержки.

Тактильные эффекты, связанные со звуком

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

Дополнительную информацию см. в справочной документации HapticGenerator .

Поиск приложений

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

Диаграмма, иллюстрирующая индексирование и поиск в AppSearch

AppSearch существует в двух вариантах: локальный индекс для использования вашим приложением, совместимый со старыми версиями Android, или центральный индекс, поддерживаемый для всей системы в Android 12. Используя центральный индекс, ваше приложение может разрешить отображение своих данных на поверхностях пользовательского интерфейса системы с помощью предварительно установленного интеллектуального компонента системы. Какие именно данные отображаются на поверхностях системного пользовательского интерфейса, зависит от OEM-производителя. Кроме того, ваше приложение может безопасно обмениваться данными с другими приложениями, чтобы они также могли выполнять поиск по этим данным.

Узнайте больше о AppSearch в руководстве для разработчиков и начните использовать его с библиотекой AppSearch Jetpack , которая обеспечивает удобную для разработчиков поверхность API, а также поддержку процессора аннотаций.

Игровой режим

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

Дополнительную информацию см. в разделе Игровой режим .

Рекомендации и улучшения режима «Картинка в картинке» (PiP)

В Android 12 представлены следующие улучшения режима PiP:

Поддержка новых жестов PiP

Android 12 теперь поддерживает жесты сохранения и масштабирования для окна PiP:

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

  • Теперь пользователь может изменять размер окна PiP, используя масштабирование.

В Android 12 были внесены значительные косметические улучшения в анимированные переходы между полноэкранным режимом и окнами PiP. Мы настоятельно рекомендуем внести все применимые изменения; как только вы это сделаете, эти изменения автоматически масштабируются на большие экраны, такие как складные устройства и планшеты, без каких-либо дополнительных действий.

Эти особенности заключаются в следующем:

Новые уведомления о телефонных звонках, позволяющие ранжировать важность входящих звонков.

В Android 12 добавлен новый стиль уведомлений Notification.CallStyle для телефонных звонков. Использование этого шаблона позволяет вашему приложению указывать важность активных вызовов, отображая заметную метку, показывающую время вызова в строке состояния; пользователь может коснуться этого чипа, чтобы вернуться к разговору.

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

Реализуйте следующий код для всех типов вызовов.

Котлин

// Create a new call with the user as caller.
val incoming_caller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Ява

// Create a new call with the user as caller.
Person incoming_caller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

Используйте forIncomingCall() , чтобы создать уведомление о стиле вызова для входящего вызова.

Котлин

// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller)

Ява

// Create a call style notification for an incoming call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller);

Используйте forOngoingCall() , чтобы создать уведомление о стиле вызова для постоянного вызова.

Котлин

// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller)

Ява

// Create a call style notification for an ongoing call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller);

Используйте forScreeningCall() , чтобы создать уведомление о стиле вызова для проверки вызова.

Котлин

// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller)

Ява

Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

Обогащенная поддержка изображений для уведомлений

В Android 12 вы теперь можете обогатить опыт уведомления вашего приложения, предоставляя анимированные изображения в MessagingStyle() и BigPictureStyle() . Кроме того, ваше приложение теперь может позволить пользователям отправлять сообщения изображений, когда они отвечают на сообщения из оттенка уведомлений.

Улучшения режима погружения для навигации с помощью жестов.

Android 12 объединяет существующее поведение, чтобы пользователям было проще выполнять команды навигации с помощью жестов в режиме погружения . Кроме того, в Android 12 предусмотрена обратная совместимость для режима липкого погружения .

Совместное использование URL -адресов (только пиксель)

На устройствах Pixel пользователи теперь могут обмениваться ссылками на недавно просмотренного веб -контента непосредственно с экрана Recents. После посещения контента в приложении пользователь может провести на экране Recesr и найти приложение, где они просмотрели контент, затем нажмите на кнопку ссылки, чтобы копировать или поделиться URL.

Для получения дополнительной информации см. Включите обмен URL -адресом .

Безопасность и конфиденциальность

Приборная панель конфиденциальности

Вертикальная временная шкала показывает различные приложения, которые имеют          Доступ к информации о местоположении, и в какое время произошел доступ
Рисунок 1. Экран использования местоположения, часть приборной панели конфиденциальности.

На поддерживаемых устройствах, которые запускаются Android 12 или выше, в настройках системы появляется экран панели конфиденциальности. На этом экране пользователи могут получить доступ к отдельным экранам, которые показывают, когда приложения получают доступ к местоположению, камере и микрофону. Каждый экран показывает временную шкалу, когда разные приложения получали доступ к определенному типу данных. На рисунке 1 показан график доступа к данным для информации о местоположении.

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

Разрешения Bluetooth

Android 12 представляет BLUETOOTH_SCAN , BLUETOOTH_ADVERTISE и BLUETOOTH_CONNECT . Эти разрешения облегчают приложения, которые нацелены на Android 12 для взаимодействия с устройствами Bluetooth , особенно для приложений, которые не требуют доступа к местоположению устройства.

Обновите объявления о разрешении на Bluetooth вашего приложения

Чтобы подготовить устройство для нацеливания на Android 12 или выше, обновите логику вашего приложения. Вместо того, чтобы объявлять наследие набора разрешений Bluetooth , объявьте более современный набор разрешений Bluetooth .

Поиск группы разрешений

На Android 12 или выше вы можете запросить, как система организует предоставленные платформы разрешения в группы разрешений:

  • Чтобы определить группу разрешений, в которую система разместила разрешение, определяющее платформу, вызовите getGroupOfPlatformPermission() .
  • Чтобы определить, определяемые платформой разрешения, которые система включила в конкретную группу разрешений, вызовы getPlatformPermissionsForGroup() .

Скрыть окна наложения приложения

Чтобы дать разработчикам больше контроля над тем, что пользователи видят, когда они взаимодействуют с приложением разработчика, Android 12 представляет возможность скрывать оверлейные окна, которые нарисованы приложениями, которые имеют разрешение SYSTEM_ALERT_WINDOW .

После объявления разрешения HIDE_OVERLAY_WINDOWS , приложение может вызвать setHideOverlayWindows() чтобы указать, что все окна типа TYPE_APPLICATION_OVERLAY должны быть скрыты, когда видно собственное окно приложения. Приложения могут выбрать это при отображении чувствительных экранов, таких как потоки подтверждения транзакций.

Приложения, которые показывают Windows of TYPE_APPLICATION_OVERLAY должны рассмотреть альтернативы, которые могут быть более подходящими для их варианта использования, таких как изображение в картинке или пузырьки .

Известный флаг защиты разрешений подписчиков

Начиная с Android 12, атрибут knownCerts для разрешений на уровне подписи позволяет обратиться к дайджестам известных сертификатов подписания во время объявления.

Ваше приложение может объявить этот атрибут и использовать флаг knownSigner , чтобы позволить устройствам и приложениям предоставлять разрешения подписи другим приложениям , без необходимости подписывать приложения во время производства устройств и отгрузки.

Свойства устройства аттестация

Android 12 расширяет набор приложений, которые могут проверить свойства устройства, которые находятся в сертификате аттестации, когда эти приложения генерируют новый ключ.

По состоянию на Android 9 (уровень API 28) владельцы политики устройства (DPO) , которые используют KeyMaster 4.0 или выше, могут проверить свойства устройства в этих сертификатах аттестации. Начиная с Android 12, любое приложение, которое нацелено на Android 12 (API -уровень 31) или выше, может выполнить эту проверку, используя метод setDevicePropertiesAttestationIncluded() .

Свойства сгенерированного устройства включают следующие поля Build :

  • BRAND
  • DEVICE
  • MANUFACTURER
  • MODEL
  • PRODUCT

Защитные действия уведомления о блокировке

Начиная с Android 12, класс Notification.Action.Builder setAuthenticationRequired() Этот метод помогает добавить дополнительный уровень безопасности к уведомлениям на заблокированных устройствах.

Локализоватные строки для биометрического прозрачного

Android 12 представляет новые API, которые помогут вам улучшить опыт пользователя биометрической аутентификации вашего приложения. Новый вложенный класс BiometricManager.Strings включает в себя методы getButtonLabel() , getPromptMessage() и getSettingName() , которые позволяют вашему приложению извлечь пользовательский и локализованный кнопку метку, сообщение о приглашении или имя настройки приложения. Используйте эти этикетки, чтобы создать более точные инструкции, ориентированные на пользователь, специфичные для используемых методов биометрической аутентификации, таких как «Использование разблокировки лица» или «Используйте свой отпечаток пальца для продолжения».

Обнаружение фишинга в приложениях обмена сообщениями (только пиксель)

Пользователь видит подобное сообщение, когда обнаруживается подозрительное сообщение.

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

  • Подозрительные запросы, такие как отправить код, деньги или аналогичные
  • Недоверенные URL
  • Злонамеренные привязанности
  • Ссылки на злонамеренные приложения

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

Разработчики могут отказаться от этой функции, добавив новый тег Metadata, включая строку com.google.android.ALLOW_PHISHING_DETECTION в их манифестных файлах приложения. Например:

<manifest>
    <application android:name="com.messagingapp">
        <meta-data android:name="com.google.android.ALLOW_PHISHING_DETECTION" android:value="false" />

    </application>
</manifest>

СМИ

Совместимая медиа -транскодирование

Начиная с Android 12 (API -уровне 31), система может автоматически транскод HEVC (H.265) и HDR (HDR10 и HDR10+), записанные на устройстве для AVC (H.264), формат, который широко совместим со стандартными игроками. Это использует преимущества современных кодеков, когда они доступны, не жертвуя совместимостью со старыми приложениями.

См. Совместимый медиа -транскодирование для более подробной информации.

Performance Class

Android 12 представляет стандартный класс производительности . Класс производительности определяет аппаратные возможности, помимо базовых требований Android. Каждое устройство Android объявляет о классе производительности, который оно поддерживает. Разработчики могут проверить класс производительности устройства во время выполнения и обеспечить обновленные впечатления, которые в полной мере используют возможности устройства.

Смотрите класс Performance для получения более подробной информации.

Видео -кодирование улучшений

Android 12 определяет стандартный набор клавиш для управления значением параметра квантования (QP) для кодирования видео, что позволяет разработчикам избежать кода, специфичного для поставщика.

Новые ключи доступны в API MediaFormat , а также в медиа -библиотеке NDK .

Начиная с Android 12 видеокодеров, обеспечивает минимальный порог качества. Это гарантирует, что пользователи не испытывают чрезвычайно низкого качества при кодировании видео с высокой сложностью сцены.

Аудио Фокус

Начиная с Android 12 (API -уровень 31), когда приложение запрашивает аудио фокусировку, в то время как другое приложение имеет фокус и играет, система исчезает приложение для воспроизведения.

Смотрите аудио фокусировку в Android 12 и выше для получения более подробной информации.

MediaDRM обновления

Чтобы определить, требуется ли защищенный компонент декодера с текущими API MediaDrm , вы должны выполнить эти шаги:

  1. Создать MediaDrm .
  2. Откройте сеанс, чтобы получить идентификатор сеанса.
  3. Создайте MediaCrypto , используя идентификатор сеанса.
  4. Call MediaCrypto.requiresSecureDecoderComponent(mimeType) .

С новыми методами requiresSecureDecoder(@NonNull String mime) и requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level) вы можете определить это, как только вы создадите MediaDrm .

Камера

Камера2 расширения поставщиков

Многие из наших партнеров по производителю устройств создали пользовательские расширения камеры, такие как Bokeh, HDR, ночной режим и другие, которые они хотят, чтобы приложения использовали для создания дифференцированного опыта на своих устройствах. Библиотека камер уже поддерживает эти пользовательские расширения поставщиков. В Android 12 эти расширения поставщиков теперь выставлены непосредственно на платформе.

Это дополнение помогает приложениям, которые имеют сложные реализации Camera2 , использовать расширения поставщиков без необходимости вносить значительные изменения в устаревшем коде. API Extension Camera2 открывают точно такой же набор расширений, что и в камере, и они уже поддерживаются на многих различных устройствах , поэтому вы можете использовать их без какой -либо дополнительной конфигурации.

Для получения дополнительной информации см. CameraExtensionCharacteristics .

Поддержка датчика камеры Quad Bayer

Многие устройства Android сегодня поставляются с ультра-датчиками камер с высоким разрешением, как правило, с узорами Quad или Nona Bayer, и они обеспечивают большую гибкость с точки зрения качества изображения и производительности низкого освещения. Android 12 представляет новые API платформы, которые позволяют сторонним приложениям в полной мере воспользоваться этими универсальными датчиками. Новые API поддерживают уникальное поведение этих датчиков и учитывают, что они могут поддерживать различные конфигурации потока и комбинации при работе в режиме полного разрешения или режима «максимальное разрешение» против режима «по умолчанию».

Графика и изображения

Предоставьте приложения прямой доступ к трассам надгробных плитов

Начиная с Android 12, вы можете получить доступ к нативному сбою в приложении в качестве буфера протокола через метод ApplicationExitInfo.getTraceInputStream() . Буфер протокола сериализуется с использованием этой схемы . Ранее единственный способ получить доступ к этой информации - через мост отладки Android (ADB).

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

Поддержка изображения AVIF

Android 12 представляет поддержку изображений, которые используют формат файла изображения AV1 (AVIF). AVIF - это формат контейнера для изображений и последовательностей изображений, кодируемых с использованием AV1. Avif использует контент, закодированный внутрикарам, из-за сжатия видео. Это значительно улучшает качество изображения для того же размера файла по сравнению с более старыми форматами изображений, такими как JPEG. Для подробного взгляда на преимущества этого формата см. В блоге Джейка Арчибальда.

Более простые блуски, цветовые фильтры и другие эффекты

Android 12 добавляет новый RenderEffect , который применяет общие графические эффекты, такие как размытые, цветные фильтры, эффекты Android -шейдера и многое другое для View S и иерархий рендеринга. Эффекты могут быть объединены как либо цепные эффекты (которые составляют внутренний и внешний эффект) или смешанные эффекты. Различные устройства Android могут или не могут поддерживать функцию из -за ограниченной мощности обработки.

Эффекты также могут быть применены к базовому RenderNode для View , вызывая View.setRenderEffect(RenderEffect) .

Для реализации RenderEffect :

view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))

Декодирование нативного анимированного изображения

В Android 12 API NDK ImageDecoder был расширен для декодирования всех кадров и данных о времени из изображений, которые используют анимированные форматы файлов gif и анимированных файлов WebP . Когда он был представлен в Android 11, этот API декодировал только первое изображение из анимации в этих форматах.

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

Для получения более подробной информации об API см. Справочник API и образец на GitHub .

Возможности подключения

Сделать соблюдение приложений.

Чтобы поддержать необходимость приложений для сопутствующих приложений для работы для управления устройством, Android 12 представляет API, которые выполняют следующее:

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

Чтобы использовать API, ваши устройства должны быть подключены с помощью диспетчера компаньонов . Для получения дополнительной информации см. CompanionDeviceManager.startObservingDevicePresence() и CompanionDeviceService.onDeviceAppeared() .

Профили диспетчера компаньона

Диалог разрешений, который использует профиль устройства компаньона для запроса нескольких разрешений в одном запросе.

Партнерные приложения на Android 12 (API -уровне 31) и выше могут использовать профили компаньона при подключении к часам. Использование профиля упрощает процесс регистрации путем объединения предоставления специфического набора разрешений на типе устройства в один шаг.

Получившиеся разрешения предоставляются приложению Companion после подключения устройства, и для подключения к тому, что устройство связано с устройством. Удаление приложения или удаление ассоциации удаляет разрешения.

Для получения дополнительной информации см. AssociationRequest.Builder.setDeviceProfile() .

Улучшения оценки полосы пропускания

В Android 12 возможности оценки полосы пропускания, предоставленные getLinkDownstreamBandwidthKbps() и getLinkUpstreamBandwidthKbps() улучшаются как для Wi-Fi, так и для клеточной связности. Возвращенные значения теперь представляют средневзвешенную пропускную способность пользователя на одного оператора или WiFi SSID, тип сети и уровень сигнала во всех приложениях на устройстве. Это может вернуть более точную и реалистичную оценку ожидаемой пропускной способности, обеспечить оценки холодного начала вашего приложения и требует меньше циклов по сравнению с использованием других методов оценки пропускной способности.

Усовершенствования Wi-Fi Sailing (NAN)

Android 12 добавляет некоторые усовершенствования в Wi-Fi Able:

  • На устройствах под управлением Android 12 (API -уровень 31) и выше, вы можете использовать обратный вызов onServiceLost() , который будет предупрежден, когда ваше приложение потеряло обнаруженную услугу из -за остановки услуг или выхода из диапазона.
  • То, как настраиваются несколько путей данных (пути данных NAN), изменяется, чтобы быть более эффективным. Более ранние версии использовали сообщения L2 для обмена информацией о сверстниках инициаторов, которые ввели задержку. На устройствах, работающих на Android 12 и выше, респондер (сервер) может быть настроен, чтобы принять любой одноранговый, то есть он не должен знать информацию о инициаторе заранее. Это ускоряет подключение DataPath и позволяет нескольким точечным ссылкам только с одним сетевым запросом.
  • Чтобы предотвратить отклонение структуры обнаружения или запросов на подключение из -за запуска ресурсов, на устройствах, работающих на Android 12 и выше, вы можете позвонить WifiAwareManager.getAvailableAwareResources() . Возвратное значение этого метода позволяет получить количество доступных путей данных, количество доступных сессий публикации и количество доступных сеансов подписки.

Одновременное соединение с одноранговым + подключение к Интернету

Когда устройства, нацеленные на Android 12 (API-уровень 31) и более высокий запуск на устройствах с аппаратной поддержкой, использование одноранговых соединений не отключает ваше существующее соединение Wi-Fi при создании соединения с одноранговым устройством. Чтобы проверить поддержку этой функции, используйте WifiManager.isMultiStaConcurrencySupported() .

Включить экран на платежи NFC

В приложениях, которые нацелены на Android 12 и выше, вы можете включить платежи NFC без экрана устройства, установив requireDeviceScreenOn на false . Для получения дополнительной информации о платежах NFC с экраном или заблокированным, см. Включение экрана и поведение блокировки экрана .

Хранилище

Android 12 представляет следующие возможности управления хранением:

Основная функциональность

Автоматические обновления приложений

Android 12 представляет метод setRequireUserAction() для приложений, которые используют API PackageInstaller . Этот метод позволяет приложениям установщика выполнять обновления приложений, не требуя, чтобы пользователь подтвердил действие.

Информация о чипсете устройства

Android 12 добавляет две константы в android.os.Build , которые разоблачают поставщика поставщика чипсетов SOC и модели через SDK. Вы можете получить эту информацию, позвонив Build.SOC_MANUFACTURER и Build.SOC_MODEL соответственно.

Обновления для основных API -файлов Java

На основании запросов и сотрудничества с разработчиками мы добавили следующие основные библиотеки в Android 12:

Сорт Апис
java.lang.Deprecated
java.lang.Byte
java.lang.Short
java.lang.Math
java.lang.StrictMath
java.util.Set copyOf()
java.util.Map copyOf()
java.util.List copyOf()
java.time.Duration
java.time.LocalTime
,

Android 12 представляет отличные новые функции и API для разработчиков. Ниже разделам помогают узнать о функциях для ваших приложений и начать с соответствующих API.

Для получения подробного списка новых, модифицированных и удаленных API, прочитайте отчет API DIFF . Для получения подробной информации о новых API -интерфейсах посетите ссылку API Android - новые API выделены для видимости. Кроме того, чтобы узнать о областях, где изменения платформы могут повлиять на ваши приложения, обязательно ознакомьтесь с изменениями поведения Android 12 для приложений, которые нацелены на Android 12 и для всех приложений .

Пользовательский опыт

Материал вы

Android 12 представляет новый язык дизайна под названием «Материал» , который помогает вам создать более персонализированные, красивые приложения. Чтобы внести все новейшие обновления Material Design 3 в ваши приложения, попробуйте альфа -версию компонентов дизайна материала .

Материал вы

Улучшения виджетов

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

См. Улучшения виджетов Android 12 для получения дополнительной информации.

Богатая вставка контента

Android 12 представляет новый унифицированный API, который позволяет вашему приложению получать богатый контент из любого доступного источника: буфер обмена, клавиатура или перетаскивание.

Для получения дополнительной информации см. Получите богатый контент .

API Splash Splash API

Android 12 представляет новую анимацию запуска приложения для всех приложений, которая включает в себя движение Into-App с точки запуска, экраны для брызг, показывающий значок приложения и переход к самому приложению. См. Руководство по разработчику Splash Screens для получения более подробной информации.

Округлые угловые API

Android 12 представляет RoundedCorner и WindowInsets.getRoundedCorner(int position) , которые обеспечивают радиус и центральную точку для округлых углов.

Для получения дополнительной информации см. Объединенные углы .

Богатый тактичный опыт

Android 12 расширяет инструменты для создания информативной тактичной обратной связи для мероприятий пользовательского интерфейса, иммерсивных и восхитительных эффектов для игр и хаптиков внимания для производительности.

Эффекты привода

Android 12 добавляет выразительные эффекты, такие как низкие клещи , которые используют преимущества более широкой полосы пропускания частоты последних приводов. Разработчики игр теперь могут получить доступ к нескольким, различным приводам независимо от игровых контроллеров, чтобы обеспечить один и тот же эффект синхронно или различные тактичные эффекты на множественные приводы. Для разработчиков мы рекомендуем использовать константы и примитивы в качестве строительных блоков для богатых гаптических эффектов - константы для улучшения событий пользовательского интерфейса и тактичного композитора для последовательности примитивов для более сложных эффектов. Эти API доступны, чтобы примерить устройства Pixel 4, и мы продолжаем работать с нашими партнерами по производству устройств, чтобы предоставить новейшую поддержку Haptics для пользователей по всей экосистеме.

Аудио связаны тактичные эффекты

Приложения Android 12 могут генерировать тактичную обратную связь, полученную из аудиосессии, используя вибратор телефона. Это дает возможность для более захватывающих игровых и аудио -опытов. Например, гаптические рингтоны могут помочь идентифицировать абонентов, или игра вождения может имитировать ощущение грубой местности.

Смотрите справочную документацию HapticGenerator для получения дополнительной информации.

AppSearch

Android 12 представляет AppSearch, высокопроизводительную поисковую систему в качестве системной службы. AppSearch позволяет приложениям индексировать структурированные данные и поиск по ним со встроенными возможностями поиска. Кроме того, AppSearch поддерживает нативные функции поиска, такие как высокоэффективная индексация и поиск, многоязычная поддержка и рейтинг релевантности.

Диаграмма, иллюстрирующая индексацию и поиск в AppSearch

AppSearch поставляется в двух вкусах: локальный индекс для вашего приложения для использования, который совместим с более старыми версиями Android, или центральный индекс, поддерживаемый для всей системы в Android 12. Используя центральный индекс, ваше приложение может позволить его данные отображаться на поверхностях системного пользовательского интерфейса с помощью предварительно обоснованного интеллектуального компонента системы. Какие данные отображаются на поверхностях пользовательского интерфейса системы, зависит от OEM. Кроме того, ваше приложение может безопасно обмениваться данными с другими приложениями, чтобы они также искали эти данные.

Узнайте больше о AppSearch в Руководстве по разработчике и начните использовать его в библиотеке AppSearch JetPack , которая предоставляет удобную для разработчика поверхность API, а также поддержку процессора аннотации.

Игровой режим

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

Для получения дополнительной информации см. Режим игры .

Рекомендации и улучшения картинки (PIP) (PIP)

Android 12 представляет следующие улучшения для режима PIP:

Поддержка новых жестов PIP

Android 12 теперь поддерживает жесты с хранением и заклинанием для окна PIP:

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

  • Пользователь теперь может изменить размер окна PIP, используя Pinch-to-Zoom.

Android 12 добавил значительные косметические улучшения к анимированным переходам между полноэкранными и PIP Windows. Мы настоятельно рекомендуем реализовать все применимые изменения; После того, как вы это сделаете, эти изменения автоматически масштабируются на больших экранах, таких как складные и планшеты, без какой -либо дополнительной необходимой работы.

Эти функции следующие:

Новые уведомления о телефонном звонке, позволяющие рейтинг важность входящих звонков

Android 12 добавляет новое Notification.CallStyle в стиле уведомления. Callstyle для телефонных звонков. Использование этого шаблона позволяет вашему приложению указать важность активных вызовов, отображая выдающийся чип, который показывает время вызова в строке состояния; Пользователь может нажать этот чип, чтобы вернуться к своему вызову.

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

Реализуйте следующий код для всех типов вызовов.

Котлин

// Create a new call with the user as caller.
val incoming_caller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Ява

// Create a new call with the user as caller.
Person incoming_caller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

Используйте forIncomingCall() , чтобы создать уведомление о стиле вызова для входящего вызова.

Котлин

// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller)

Ява

// Create a call style notification for an incoming call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller);

Используйте forOngoingCall() , чтобы создать уведомление о стиле вызова для постоянного вызова.

Котлин

// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller)

Ява

// Create a call style notification for an ongoing call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller);

Используйте forScreeningCall() , чтобы создать уведомление о стиле вызова для проверки вызова.

Котлин

// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller)

Ява

Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

Обогащенная поддержка изображений для уведомлений

В Android 12 вы теперь можете обогатить опыт уведомления вашего приложения, предоставляя анимированные изображения в MessagingStyle() и BigPictureStyle() . Кроме того, ваше приложение теперь может позволить пользователям отправлять сообщения изображений, когда они отвечают на сообщения из оттенка уведомлений.

Улучшения режима погружения для навигации с помощью жестов.

Android 12 объединяет существующее поведение, чтобы пользователям было проще выполнять команды навигации с помощью жестов в режиме погружения . Кроме того, в Android 12 предусмотрена обратная совместимость для режима липкого погружения .

Совместное использование URL -адресов (только пиксель)

На устройствах Pixel пользователи теперь могут обмениваться ссылками на недавно просмотренного веб -контента непосредственно с экрана Recents. После посещения контента в приложении пользователь может провести на экране Recesr и найти приложение, где они просмотрели контент, затем нажмите на кнопку ссылки, чтобы копировать или поделиться URL.

Для получения дополнительной информации см. Включите обмен URL -адресом .

Безопасность и конфиденциальность

Приборная панель конфиденциальности

Вертикальная временная шкала показывает различные приложения, которые имеют          Доступ к информации о местоположении, и в какое время произошел доступ
Рисунок 1. Экран использования местоположения, часть приборной панели конфиденциальности.

На поддерживаемых устройствах, которые запускаются Android 12 или выше, в настройках системы появляется экран панели конфиденциальности. На этом экране пользователи могут получить доступ к отдельным экранам, которые показывают, когда приложения получают доступ к местоположению, камере и микрофону. Каждый экран показывает временную шкалу, когда разные приложения получали доступ к определенному типу данных. На рисунке 1 показан график доступа к данным для информации о местоположении.

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

Разрешения Bluetooth

Android 12 представляет BLUETOOTH_SCAN , BLUETOOTH_ADVERTISE и BLUETOOTH_CONNECT . Эти разрешения облегчают приложения, которые нацелены на Android 12 для взаимодействия с устройствами Bluetooth , особенно для приложений, которые не требуют доступа к местоположению устройства.

Обновите объявления о разрешении на Bluetooth вашего приложения

Чтобы подготовить устройство для нацеливания на Android 12 или выше, обновите логику вашего приложения. Вместо того, чтобы объявлять наследие набора разрешений Bluetooth , объявьте более современный набор разрешений Bluetooth .

Поиск группы разрешений

На Android 12 или выше вы можете запросить, как система организует предоставленные платформы разрешения в группы разрешений:

  • Чтобы определить группу разрешений, в которую система разместила разрешение, определяющее платформу, вызовите getGroupOfPlatformPermission() .
  • Чтобы определить, определяемые платформой разрешения, которые система включила в конкретную группу разрешений, вызовы getPlatformPermissionsForGroup() .

Скрыть окна наложения приложения

Чтобы дать разработчикам больше контроля над тем, что пользователи видят, когда они взаимодействуют с приложением разработчика, Android 12 представляет возможность скрывать оверлейные окна, которые нарисованы приложениями, которые имеют разрешение SYSTEM_ALERT_WINDOW .

После объявления разрешения HIDE_OVERLAY_WINDOWS , приложение может вызвать setHideOverlayWindows() чтобы указать, что все окна типа TYPE_APPLICATION_OVERLAY должны быть скрыты, когда видно собственное окно приложения. Приложения могут выбрать это при отображении чувствительных экранов, таких как потоки подтверждения транзакций.

Приложения, которые показывают Windows of TYPE_APPLICATION_OVERLAY должны рассмотреть альтернативы, которые могут быть более подходящими для их варианта использования, таких как изображение в картинке или пузырьки .

Известный флаг защиты разрешений подписчиков

Начиная с Android 12, атрибут knownCerts для разрешений на уровне подписи позволяет обратиться к дайджестам известных сертификатов подписания во время объявления.

Ваше приложение может объявить этот атрибут и использовать флаг knownSigner , чтобы позволить устройствам и приложениям предоставлять разрешения подписи другим приложениям , без необходимости подписывать приложения во время производства устройств и отгрузки.

Свойства устройства аттестация

Android 12 расширяет набор приложений, которые могут проверить свойства устройства, которые находятся в сертификате аттестации, когда эти приложения генерируют новый ключ.

По состоянию на Android 9 (уровень API 28) владельцы политики устройства (DPO) , которые используют KeyMaster 4.0 или выше, могут проверить свойства устройства в этих сертификатах аттестации. Начиная с Android 12, любое приложение, которое нацелено на Android 12 (API -уровень 31) или выше, может выполнить эту проверку, используя метод setDevicePropertiesAttestationIncluded() .

Свойства сгенерированного устройства включают следующие поля Build :

  • BRAND
  • DEVICE
  • MANUFACTURER
  • MODEL
  • PRODUCT

Защитные действия уведомления о блокировке

Начиная с Android 12, класс Notification.Action.Builder setAuthenticationRequired() Этот метод помогает добавить дополнительный уровень безопасности к уведомлениям на заблокированных устройствах.

Локализоватные строки для биометрического прозрачного

Android 12 представляет новые API, которые помогут вам улучшить опыт пользователя биометрической аутентификации вашего приложения. Новый вложенный класс BiometricManager.Strings включает в себя методы getButtonLabel() , getPromptMessage() и getSettingName() , которые позволяют вашему приложению извлечь пользовательский и локализованный кнопку метку, сообщение о приглашении или имя настройки приложения. Используйте эти этикетки, чтобы создать более точные инструкции, ориентированные на пользователь, специфичные для используемых методов биометрической аутентификации, таких как «Использование разблокировки лица» или «Используйте свой отпечаток пальца для продолжения».

Обнаружение фишинга в приложениях обмена сообщениями (только пиксель)

Пользователь видит подобное сообщение, когда обнаруживается подозрительное сообщение.

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

  • Подозрительные запросы, такие как отправить код, деньги или аналогичные
  • Недоверенные URL
  • Злонамеренные привязанности
  • Ссылки на злонамеренные приложения

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

Разработчики могут отказаться от этой функции, добавив новый тег Metadata, включая строку com.google.android.ALLOW_PHISHING_DETECTION в их манифестных файлах приложения. Например:

<manifest>
    <application android:name="com.messagingapp">
        <meta-data android:name="com.google.android.ALLOW_PHISHING_DETECTION" android:value="false" />

    </application>
</manifest>

СМИ

Совместимая медиа -транскодирование

Starting in Android 12 (API level 31), the system can automatically transcode HEVC(H.265) and HDR (HDR10 and HDR10+) videos recorded on the device to AVC (H.264), a format which is widely compatible with standard players. This takes advantage of modern codecs when they are available without sacrificing compatibility with older applications.

See compatible media transcoding for more details.

Performance class

Android 12 introduces a standard called performance class . A performance class specifies hardware capabilities beyond Android's baseline requirements. Each Android device declares the performance class that it supports. Developers can check the device's performance class at runtime and provide upgraded experiences that take full advantage of the device's capabilities.

See Performance class for more details.

Video encoding improvements

Android 12 defines a standard set of keys for controlling the quantization parameter (QP) value for video encoding, allowing developers to avoid vendor-specific code.

The new keys are available in the MediaFormat API and also in the NDK Media library .

Starting with Android 12 video encoders enforce a minimum quality threshold. This guarantees that users don't experience extremely low quality when encoding videos with high scene complexity.

Audio focus

Starting with Android 12 (API level 31), when an app requests audio focus while another app has the focus and is playing, the system fades out the playing app.

See Audio focus in Android 12 and higher for more details.

MediaDrm updates

In order to determine whether a secure decoder component is required with the current MediaDrm APIs, you must follow these steps:

  1. Create a MediaDrm .
  2. Open a session to obtain a session id.
  3. Create a MediaCrypto using the session id.
  4. Call MediaCrypto.requiresSecureDecoderComponent(mimeType) .

With the new methods requiresSecureDecoder(@NonNull String mime) and requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level) you can determine this as soon as you create a MediaDrm .

Камера

Camera2 vendor extensions

Many of our device manufacturer partners have built custom camera extensions—such as Bokeh, HDR, Night mode, and others—that they want apps to use to create differentiated experiences on their devices. The CameraX library already supports these custom vendor extensions. In Android 12, these vendor extensions are now exposed directly in the platform.

This addition helps apps that have complex Camera2 implementations take advantage of vendor extensions without having to make significant changes to legacy code. The Camera2 Extension APIs expose exactly the same set of extensions as in CameraX, and those are already supported on many different devices , so you can use them without any additional configuration.

For more information, see CameraExtensionCharacteristics .

Quad bayer camera sensor support

Many Android devices today ship with ultra high-resolution camera sensors, typically with Quad or Nona Bayer patterns, and these offer great flexibility in terms of image quality and low-light performance. Android 12 introduces new platform APIs that let third-party apps take full advantage of these versatile sensors. The new APIs support the unique behavior of these sensors and take into account that they might support different stream configurations and combinations when operating in full resolution or 'maximum resolution' mode vs 'default' mode.

Графика и изображения

Provide apps direct access to tombstone traces

Starting in Android 12, you can access your app's native crash tombstone as a protocol buffer through the ApplicationExitInfo.getTraceInputStream() method. The protocol buffer is serialized using this schema . Previously, the only way to get access to this information was through the Android Debug Bridge (adb).

For more information, see Provide apps direct access to tombstone traces

AVIF image support

Android 12 introduces support for images that use the AV1 Image File Format (AVIF). AVIF is a container format for images and sequences of images encoded using AV1. AVIF takes advantage of the intra-frame encoded content from video compression. This dramatically improves image quality for the same file size when compared to older image formats, such as JPEG. For an in-depth look at the advantages of this format, see Jake Archibald's blog post .

Easier blurs, color filters, and other effects

Android 12 adds the new RenderEffect that applies common graphics effects such as blurs, color filters, Android shader effects, and more to View s and rendering hierarchies. Effects can be combined as either chain effects (which compose an inner and outer effect) or blended effects. Different Android devices may or may not support the feature due to limited processing power.

Effects can also be applied to the underlying RenderNode for View s by calling View.setRenderEffect(RenderEffect) .

To implement a RenderEffect :

view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))

Native animated image decoding

In Android 12, the NDK ImageDecoder API has been expanded to decode all frames and timing data from images that use the animated GIF and animated WebP file formats. When it was introduced in Android 11, this API decoded only the first image from animations in these formats.

Use ImageDecoder instead of third-party libraries to further decrease APK size and benefit from future updates related to security and performance.

For more details on the API, refer to the API reference and the sample on GitHub .

Возможности подключения

Keeping companion apps awake

To support the need of companion apps to stay running to manage the device, Android 12 introduces APIs that do the following:

  • Enable you to wake an app when a companion device is within range.
  • Guarantee that the process will continue running while the device stays within range.

To use the APIs, your devices must be connected using Companion Device Manager . For more information, see CompanionDeviceManager.startObservingDevicePresence() and CompanionDeviceService.onDeviceAppeared() .

Companion Device Manager profiles

A permissions dialog that uses a companion device profile to request multiple permissions in a single request.

Partner apps on Android 12 (API level 31) and higher can use companion device profiles when connecting to a watch. Using a profile simplifies the enrollment process by bundling the granting of a device-type-specific set of permissions into one step.

The bundled permissions are granted to the companion app once the device connects, and last only while the device is associated. Deleting the app or removing the association removes the permissions.

For more information, see AssociationRequest.Builder.setDeviceProfile() .

Bandwidth estimation improvements

In Android 12, the bandwidth estimation capabilities provided by getLinkDownstreamBandwidthKbps() and getLinkUpstreamBandwidthKbps() are improved for both Wi-Fi and cellular connectivity. The values returned now represent the user's all-time weighted average throughput per carrier or WiFi SSID, network type, and signal level, across all applications on the device. This can return a more-accurate and realistic estimate of expected throughput, provide estimates on a cold start of your application, and requires fewer cycles when compared to using other throughput estimation methods.

Wi-Fi Aware (NAN) enhancements

Android 12 adds some enhancements to Wi-Fi Aware:

  • On devices running Android 12 (API level 31) and higher, you can use the onServiceLost() callback to be alerted when your app has lost a discovered service due to the service stopping or moving out of range.
  • The way that multiple data-paths (NAN Data Paths) are set up is changing to be more efficient. Earlier versions used L2 messaging to exchange peer information of the initiators, which introduced latency. On devices running Android 12 and higher, the responder (server) can be configured to accept any peer—that is, it doesn't need to know the initiator information upfront. This speeds up datapath bringup and enables multiple point-to-point links with only one network request.
  • To prevent the framework from rejecting discovery or connection requests due to running out of resources, on devices running Android 12 and higher, you can call WifiAwareManager.getAvailableAwareResources() . This method's return value lets you get the number of available data paths, the number of available publish sessions, and the number of available subscribe sessions.

Concurrent Peer-to-Peer + Internet Connection

When devices targeting Android 12 (API level 31) and higher run on devices with hardware support, using Peer-to-peer connections will not disconnect your existing Wi-Fi connection when creating the connection to the peer device. To check for support for this feature, use WifiManager.isMultiStaConcurrencySupported() .

Enable screen off for NFC payments

In apps that target Android 12 and higher, you can enable NFC payments without the device's screen on by setting requireDeviceScreenOn to false . For more information about NFC payments with screen off or locked, see Screen off and lock-screen behavior .

Хранилище

Android 12 introduces the following storage management capabilities:

Основная функциональность

Automatic app updates

Android 12 introduces the setRequireUserAction() method for apps that use the PackageInstaller API. This method allows installer apps to perform app updates without requiring the user to confirm the action.

Device chipset information

Android 12 adds two constants to android.os.Build that expose the SoC chipset vendor and model information via the SDK. You can retrieve this information by calling Build.SOC_MANUFACTURER and Build.SOC_MODEL respectively.

Updates to core Java APIs

Based on requests and collaboration with developers, we've added the following core libraries in Android 12:

Сорт Апис
java.lang.Deprecated
java.lang.Byte
java.lang.Short
java.lang.Math
java.lang.StrictMath
java.util.Set copyOf()
java.util.Map copyOf()
java.util.List copyOf()
java.time.Duration
java.time.LocalTime
,

Android 12 introduces great new features and APIs for developers. The sections below help you learn about features for your apps and get started with the related APIs.

For a detailed list of new, modified, and removed APIs, read the API diff report . For details on new APIs visit the Android API reference — new APIs are highlighted for visibility. Also, to learn about areas where platform changes may affect your apps, be sure to check out Android 12 behavior changes for apps that target Android 12 and for all apps .

Пользовательский опыт

Material You

Android 12 introduces a new design language called Material You , helping you to build more personalized, beautiful apps. To bring all of the latest Material Design 3 updates into your apps, try an alpha version of Material Design Components .

Material You

Widgets improvements

Android 12 revamps the existing Widgets API to improve the user and developer experience in the platform and launchers. We've created a guide to help you ensure your widget is compatible with Android 12 and to refresh it with new features.

See Android 12 widgets improvements for more information.

Rich content insertion

Android 12 introduces a new unified API that lets your app receive rich content from any available source: clipboard, keyboard, or drag and drop.

For more information, see Receive rich content .

App splash screens API

Android 12 introduces a new app launch animation for all apps that includes an into-app motion from the point of launch, a splash screen showing the app icon, and a transition to the app itself. See the splash screens developer guide for more details.

Rounded corner APIs

Android 12 introduces RoundedCorner and WindowInsets.getRoundedCorner(int position) , which provide the radius and center point for rounded corners.

For more information, see Rounded corners .

Rich haptic experiences

Android 12 expands the tools for creating informative haptic feedback for UI events, immersive and delightful effects for gaming, and attentional haptics for productivity.

Actuator effects

Android 12 adds expressive effects like low tick that take advantage of the broader frequency bandwidth of the latest actuators. Game developers can now access multiple, different actuators independently in game controllers to deliver the same effect synchronously or different haptic effects on multiple actuators. For developers, we recommend using the constants and primitives as building blocks for rich haptic effects - constants to enhance UI events and haptic composer to sequence primitives for more complex effects. These APIs are available to try on Pixel 4 devices, and we're continuing to work with our device-maker partners to bring the latest in haptics support to users across the ecosystem.

Audio-coupled haptic effects

Android 12 apps can generate haptic feedback derived from an audio session using the phone's vibrator. This provides an opportunity for more immersive game and audio experiences. For example, haptic-enhanced ringtones can help identify callers, or a driving game could simulate the feeling of rough terrain.

See the HapticGenerator reference documentation for more information.

AppSearch

Android 12 introduces AppSearch, a high-performance on-device search engine, as a system service. AppSearch allows applications to index structured data and search over it with built-in full-text search capabilities. Furthermore, AppSearch supports native search features, like highly-efficient indexing and retrieval, multi-language support, and relevancy ranking.

Diagram illustrating indexing and searching within AppSearch

AppSearch comes in two flavors: a local index for your application to use that's compatible with older versions of Android, or a central index maintained for the entire system in Android 12. Using the central index, your application can allow its data to be displayed on system UI surfaces by the system's pre-installed intelligence component. Exactly which data gets displayed on system UI surfaces is dependent on the OEM. Additionally, your application can securely share data with other applications, to allow them to search over that data as well.

Learn more about AppSearch in the developer guide , and begin using it with the AppSearch Jetpack library , which provides a developer-friendly API surface as well as annotation processor support.

Game Mode

The Game Mode API and Game Mode interventions allow you to optimize gameplay by prioritizing characteristics, such as performance or battery life based on users settings or game specific configurations.

For more information, see Game Mode .

Picture-in-picture (PiP) recommendations and improvements

Android 12 introduces the following improvements for PiP mode:

Support for new PiP gestures

Android 12 now supports stashing and pinch-to-zoom gestures for the PiP window:

  • To stash the window, the user can drag the window to the left or right edge. To unstash the window, the user can either tap the visible part of the stashed window or drag it out.

  • The user can now resize the PiP window using pinch-to-zoom.

Android 12 added significant cosmetic improvements to the animated transitions between fullscreen and PiP windows. We strongly recommend implementing all applicable changes; once you've done so, these changes automatically scale to large screens such as foldables and tablets without any further required work.

These features are the following:

New phone call notifications allowing for ranking importance of incoming calls

Android 12 adds the new notification style Notification.CallStyle for phone calls. Using this template lets your app indicate the importance of active calls by displaying a prominent chip that shows the time of the call in the status bar; the user can tap this chip to return to their call.

Because incoming and ongoing calls are the most critical to users, these notifications are given top ranking in the shade. This ranking also allows the system to potentially forward these prioritized calls to other devices.

Implement the following code for all types of calls.

Котлин

// Create a new call with the user as caller.
val incoming_caller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Ява

// Create a new call with the user as caller.
Person incoming_caller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

Use forIncomingCall() to create a call style notification for an incoming call.

Котлин

// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller)

Ява

// Create a call style notification for an incoming call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller);

Use forOngoingCall() to create a call style notification for an ongoing call.

Котлин

// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller)

Ява

// Create a call style notification for an ongoing call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller);

Use forScreeningCall() to create a call style notification for screening a call.

Котлин

// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller)

Ява

Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

Enriched image support for notifications

In Android 12, you can now enrich your app's notification experience by providing animated images in MessagingStyle() and BigPictureStyle() notifications. Also, your app can now enable users to send image messages when they reply to messages from the notification shade.

Улучшения режима погружения для навигации с помощью жестов.

Android 12 объединяет существующее поведение, чтобы пользователям было проще выполнять команды навигации с помощью жестов в режиме погружения . Кроме того, в Android 12 предусмотрена обратная совместимость для режима липкого погружения .

Recents URL sharing (Pixel only)

On Pixel devices, users can now share links to recently viewed web content directly from the Recents screen. After visiting the content in an app, the user can swipe to the Recents screen and find the app where they viewed the content, then tap on the link button to copy or share the URL.

For more information, see Enable recents URL sharing .

Безопасность и конфиденциальность

Privacy Dashboard

A vertical timeline shows the different apps that have
         accessed location information, and at what time the accesses occurred
Figure 1. Location usage screen, part of the Privacy Dashboard.

On supported devices that run Android 12 or higher, a Privacy Dashboard screen appears in system settings. On this screen, users can access separate screens that show when apps access location, camera, and microphone information. Each screen shows a timeline of when different apps have accessed a particular type of data. Figure 1 shows the data access timeline for location information.

Your app can provide a rationale for users to help them understand why your app accesses location, camera, or microphone information. This rationale can appear on the new Privacy Dashboard screen, your app's permissions screen, or both.

Bluetooth permissions

Android 12 introduces the BLUETOOTH_SCAN , BLUETOOTH_ADVERTISE , and BLUETOOTH_CONNECT permissions. These permissions make it easier for apps that target Android 12 to interact with Bluetooth devices , especially for apps that don't require access to device location.

Update your app's Bluetooth permission declarations

To prepare your device for targeting Android 12 or higher, update your app's logic. Instead of declaring a legacy set of Bluetooth permissions , declare a more modern set of Bluetooth permissions .

Permission group lookup

On Android 12 or higher, you can query how the system organizes platform-provided permissions into permission groups:

Hide application overlay windows

To give developers more control over what users see when they interact with the developer's app, Android 12 introduces the ability to hide overlay windows that are drawn by apps that have the SYSTEM_ALERT_WINDOW permission.

After declaring the HIDE_OVERLAY_WINDOWS permission, an app can call setHideOverlayWindows() to indicate that all windows of type TYPE_APPLICATION_OVERLAY should be hidden when the app's own window is visible. Apps might choose to do this when displaying sensitive screens, such as transaction confirmation flows.

Apps that show windows of type TYPE_APPLICATION_OVERLAY should consider alternatives that may be more appropriate for their use case, such as picture-in-picture or bubbles .

Known signers permission protection flag

Starting in Android 12, the knownCerts attribute for signature-level permissions allows you to refer to the digests of known signing certificates at declaration time.

Your app can declare this attribute and use the knownSigner flag to allow devices and apps to grant signature permissions to other apps , without having to sign the apps at the time of device manufacturing and shipment.

Device properties attestation

Android 12 expands the set of apps that can verify the device properties that are in an attestation certificate when these apps generate a new key.

As of Android 9 (API level 28), device policy owners (DPOs) that use Keymaster 4.0 or higher can verify the device properties in these attestation certificates. Starting in Android 12, any app that targets Android 12 (API level 31) or higher can perform this verification using the setDevicePropertiesAttestationIncluded() method.

The generated device properties include the following Build fields:

  • BRAND
  • DEVICE
  • MANUFACTURER
  • MODEL
  • PRODUCT

Secure lockscreen notification actions

Starting in Android 12, the Notification.Action.Builder class supports the setAuthenticationRequired() method, which allows your app to require that a device is unlocked before your app invokes a given notification action. This method helps add an extra layer of security to notifications on locked devices.

Localizable strings for BiometricPrompt

Android 12 introduces new APIs to help you improve your app's biometric authentication user experience. The new BiometricManager.Strings nested class includes the getButtonLabel() , getPromptMessage() , and getSettingName() methods, which let your app retrieve a user-readable and localized button label, prompt message, or app setting name. Use these labels to create more precise user-facing instructions that are specific to the biometric authentication methods used, such as “Use face unlock” or “Use your fingerprint to continue”.

Phishing detection in messaging apps (Pixel only)

A user sees a message like this one when a suspicious message is detected.

On supported Pixel devices, Android 12 runs phishing detection on messages received in popular messaging apps. The system uses on-device machine learning to detect suspicious activities. When detected, the system displays a safety overlay on top of the messaging app's UI to warn users. For example, phishing detection can warn users of the following potential risks:

  • Suspicious requests, such as to send a code, money, or similar
  • Untrusted URLs
  • Malicious attachments
  • Links to malicious apps

In addition to warning the user, the overlay also lets the user report a suspicious message and provide feedback on warnings issued by the system.

Developers can opt-out of this feature by adding a new metadata tag including the string com.google.android.ALLOW_PHISHING_DETECTION in their app manifest files. Например:

<manifest>
    <application android:name="com.messagingapp">
        <meta-data android:name="com.google.android.ALLOW_PHISHING_DETECTION" android:value="false" />

    </application>
</manifest>

СМИ

Compatible media transcoding

Starting in Android 12 (API level 31), the system can automatically transcode HEVC(H.265) and HDR (HDR10 and HDR10+) videos recorded on the device to AVC (H.264), a format which is widely compatible with standard players. This takes advantage of modern codecs when they are available without sacrificing compatibility with older applications.

See compatible media transcoding for more details.

Performance class

Android 12 introduces a standard called performance class . A performance class specifies hardware capabilities beyond Android's baseline requirements. Each Android device declares the performance class that it supports. Developers can check the device's performance class at runtime and provide upgraded experiences that take full advantage of the device's capabilities.

See Performance class for more details.

Video encoding improvements

Android 12 defines a standard set of keys for controlling the quantization parameter (QP) value for video encoding, allowing developers to avoid vendor-specific code.

The new keys are available in the MediaFormat API and also in the NDK Media library .

Starting with Android 12 video encoders enforce a minimum quality threshold. This guarantees that users don't experience extremely low quality when encoding videos with high scene complexity.

Audio focus

Starting with Android 12 (API level 31), when an app requests audio focus while another app has the focus and is playing, the system fades out the playing app.

See Audio focus in Android 12 and higher for more details.

MediaDrm updates

In order to determine whether a secure decoder component is required with the current MediaDrm APIs, you must follow these steps:

  1. Create a MediaDrm .
  2. Open a session to obtain a session id.
  3. Create a MediaCrypto using the session id.
  4. Call MediaCrypto.requiresSecureDecoderComponent(mimeType) .

With the new methods requiresSecureDecoder(@NonNull String mime) and requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level) you can determine this as soon as you create a MediaDrm .

Камера

Camera2 vendor extensions

Many of our device manufacturer partners have built custom camera extensions—such as Bokeh, HDR, Night mode, and others—that they want apps to use to create differentiated experiences on their devices. The CameraX library already supports these custom vendor extensions. In Android 12, these vendor extensions are now exposed directly in the platform.

This addition helps apps that have complex Camera2 implementations take advantage of vendor extensions without having to make significant changes to legacy code. The Camera2 Extension APIs expose exactly the same set of extensions as in CameraX, and those are already supported on many different devices , so you can use them without any additional configuration.

For more information, see CameraExtensionCharacteristics .

Quad bayer camera sensor support

Many Android devices today ship with ultra high-resolution camera sensors, typically with Quad or Nona Bayer patterns, and these offer great flexibility in terms of image quality and low-light performance. Android 12 introduces new platform APIs that let third-party apps take full advantage of these versatile sensors. The new APIs support the unique behavior of these sensors and take into account that they might support different stream configurations and combinations when operating in full resolution or 'maximum resolution' mode vs 'default' mode.

Графика и изображения

Provide apps direct access to tombstone traces

Starting in Android 12, you can access your app's native crash tombstone as a protocol buffer through the ApplicationExitInfo.getTraceInputStream() method. The protocol buffer is serialized using this schema . Previously, the only way to get access to this information was through the Android Debug Bridge (adb).

For more information, see Provide apps direct access to tombstone traces

AVIF image support

Android 12 introduces support for images that use the AV1 Image File Format (AVIF). AVIF is a container format for images and sequences of images encoded using AV1. AVIF takes advantage of the intra-frame encoded content from video compression. This dramatically improves image quality for the same file size when compared to older image formats, such as JPEG. For an in-depth look at the advantages of this format, see Jake Archibald's blog post .

Easier blurs, color filters, and other effects

Android 12 adds the new RenderEffect that applies common graphics effects such as blurs, color filters, Android shader effects, and more to View s and rendering hierarchies. Effects can be combined as either chain effects (which compose an inner and outer effect) or blended effects. Different Android devices may or may not support the feature due to limited processing power.

Effects can also be applied to the underlying RenderNode for View s by calling View.setRenderEffect(RenderEffect) .

To implement a RenderEffect :

view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))

Native animated image decoding

In Android 12, the NDK ImageDecoder API has been expanded to decode all frames and timing data from images that use the animated GIF and animated WebP file formats. When it was introduced in Android 11, this API decoded only the first image from animations in these formats.

Use ImageDecoder instead of third-party libraries to further decrease APK size and benefit from future updates related to security and performance.

For more details on the API, refer to the API reference and the sample on GitHub .

Возможности подключения

Keeping companion apps awake

To support the need of companion apps to stay running to manage the device, Android 12 introduces APIs that do the following:

  • Enable you to wake an app when a companion device is within range.
  • Guarantee that the process will continue running while the device stays within range.

To use the APIs, your devices must be connected using Companion Device Manager . For more information, see CompanionDeviceManager.startObservingDevicePresence() and CompanionDeviceService.onDeviceAppeared() .

Companion Device Manager profiles

A permissions dialog that uses a companion device profile to request multiple permissions in a single request.

Partner apps on Android 12 (API level 31) and higher can use companion device profiles when connecting to a watch. Using a profile simplifies the enrollment process by bundling the granting of a device-type-specific set of permissions into one step.

The bundled permissions are granted to the companion app once the device connects, and last only while the device is associated. Deleting the app or removing the association removes the permissions.

For more information, see AssociationRequest.Builder.setDeviceProfile() .

Bandwidth estimation improvements

In Android 12, the bandwidth estimation capabilities provided by getLinkDownstreamBandwidthKbps() and getLinkUpstreamBandwidthKbps() are improved for both Wi-Fi and cellular connectivity. The values returned now represent the user's all-time weighted average throughput per carrier or WiFi SSID, network type, and signal level, across all applications on the device. This can return a more-accurate and realistic estimate of expected throughput, provide estimates on a cold start of your application, and requires fewer cycles when compared to using other throughput estimation methods.

Wi-Fi Aware (NAN) enhancements

Android 12 adds some enhancements to Wi-Fi Aware:

  • On devices running Android 12 (API level 31) and higher, you can use the onServiceLost() callback to be alerted when your app has lost a discovered service due to the service stopping or moving out of range.
  • The way that multiple data-paths (NAN Data Paths) are set up is changing to be more efficient. Earlier versions used L2 messaging to exchange peer information of the initiators, which introduced latency. On devices running Android 12 and higher, the responder (server) can be configured to accept any peer—that is, it doesn't need to know the initiator information upfront. This speeds up datapath bringup and enables multiple point-to-point links with only one network request.
  • To prevent the framework from rejecting discovery or connection requests due to running out of resources, on devices running Android 12 and higher, you can call WifiAwareManager.getAvailableAwareResources() . This method's return value lets you get the number of available data paths, the number of available publish sessions, and the number of available subscribe sessions.

Concurrent Peer-to-Peer + Internet Connection

When devices targeting Android 12 (API level 31) and higher run on devices with hardware support, using Peer-to-peer connections will not disconnect your existing Wi-Fi connection when creating the connection to the peer device. To check for support for this feature, use WifiManager.isMultiStaConcurrencySupported() .

Enable screen off for NFC payments

In apps that target Android 12 and higher, you can enable NFC payments without the device's screen on by setting requireDeviceScreenOn to false . For more information about NFC payments with screen off or locked, see Screen off and lock-screen behavior .

Хранилище

Android 12 introduces the following storage management capabilities:

Основная функциональность

Automatic app updates

Android 12 introduces the setRequireUserAction() method for apps that use the PackageInstaller API. This method allows installer apps to perform app updates without requiring the user to confirm the action.

Device chipset information

Android 12 adds two constants to android.os.Build that expose the SoC chipset vendor and model information via the SDK. You can retrieve this information by calling Build.SOC_MANUFACTURER and Build.SOC_MODEL respectively.

Updates to core Java APIs

Based on requests and collaboration with developers, we've added the following core libraries in Android 12:

Сорт Апис
java.lang.Deprecated
java.lang.Byte
java.lang.Short
java.lang.Math
java.lang.StrictMath
java.util.Set copyOf()
java.util.Map copyOf()
java.util.List copyOf()
java.time.Duration
java.time.LocalTime