Изменения в поведении: приложения для Android 13 или более поздней версии.

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

Обязательно ознакомьтесь со списком изменений поведения, которые затрагивают все приложения, работающие на Android 13 .

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

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

Если пользователь отклонит разрешение на уведомление , он не увидит уведомления, связанные с активными службами в панели уведомлений . Однако пользователи по-прежнему будут видеть уведомления, связанные с активными службами в диспетчере задач , независимо от того, предоставлено ли разрешение на уведомление.

Новое разрешение на выполнение для находящихся поблизости устройств Wi-Fi

В предыдущих версиях Android пользователю необходимо было предоставить вашему приложению разрешение ACCESS_FINE_LOCATION для выполнения нескольких распространенных сценариев использования Wi-Fi.

Поскольку пользователям сложно связать разрешения на местоположение с функциональностью Wi-Fi, Android 13 (уровень API 33) вводит разрешение времени выполнения в группе разрешений NEARBY_DEVICES для приложений, которые управляют подключениями устройства к близлежащим точкам доступа через Wi-Fi. Это разрешение, NEARBY_WIFI_DEVICES , удовлетворяет следующим вариантам использования Wi-Fi:

  • Найти или подключиться к близлежащим устройствам, таким как принтеры или устройства трансляции медиа. Этот рабочий процесс позволяет вашему приложению выполнять следующие виды задач:
    • Получайте информацию о точке доступа вне диапазона, например, через BLE.
    • Обнаружение и подключение к устройствам через Wi-Fi Aware и подключение с использованием локальной точки доступа.
    • Обнаруживайте и подключайтесь к устройствам через Wi-Fi Direct.
  • Инициируйте подключение к известному SSID, например, к автомобилю или устройству умного дома.
  • Создайте локальную точку доступа.
  • Радиус действия до находящихся поблизости устройств Wi-Fi Aware.

Если ваше приложение не получает информацию о физическом местоположении из API Wi-Fi, запрашивайте NEARBY_WIFI_DEVICES вместо ACCESS_FINE_LOCATION , когда вы ориентируетесь на Android 13 или выше и используете API Wi-Fi. Когда вы объявляете разрешение NEARBY_WIFI_DEVICES , настоятельно заявляйте, что ваше приложение никогда не получает информацию о физическом местоположении из API Wi-Fi. Для этого установите атрибут android:usesPermissionFlags на neverForLocation . Этот процесс аналогичен тому, который вы делаете в Android 12 (уровень API 31) и выше, когда вы утверждаете, что информация об устройстве Bluetooth никогда не используется для location .

Узнайте больше о том, как запросить разрешение на доступ к ближайшим устройствам Wi-Fi .

Детализированные разрешения для медиа

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

Если ваше приложение предназначено для Android 13 или более поздней версии и ему необходим доступ к медиафайлам, созданным другими приложениями , вам необходимо запросить одно или несколько из следующих детализированных разрешений на доступ к медиафайлам вместо разрешения READ_EXTERNAL_STORAGE :

Тип носителя Разрешение на запрос
Изображения и фотографии READ_MEDIA_IMAGES
Видео READ_MEDIA_VIDEO
Аудио файлы READ_MEDIA_AUDIO

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

На рисунке 1 показано приложение, запрашивающее разрешение READ_MEDIA_AUDIO .

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

Если вашему приложению ранее было предоставлено разрешение READ_EXTERNAL_STORAGE , то любые запрошенные разрешения READ_MEDIA_* будут предоставлены автоматически при обновлении. Вы можете использовать следующую команду ADB для просмотра обновленных разрешений:

adb shell cmd appops get --uid PACKAGE_NAME

Использование датчиков тела в фоновом режиме требует нового разрешения

Android 13 вводит концепцию доступа "во время использования" для датчиков тела, таких как частота сердечных сокращений, температура и процент кислорода в крови. Эта модель доступа очень похожа на ту, которую система ввела для определения местоположения в Android 10 (уровень API 29) .

Если ваше приложение предназначено для Android 13 и требует доступа к информации датчиков тела во время работы в фоновом режиме, необходимо объявить новое разрешение BODY_SENSORS_BACKGROUND в дополнение к существующему разрешению BODY_SENSORS .

Производительность и аккумулятор

Использование ресурсов батареи

Если пользователь переводит ваше приложение в состояние «ограничено» для фонового использования батареи, когда ваше приложение предназначено для Android 13, система не отправляет сообщение BOOT_COMPLETED или LOCKED_BOOT_COMPLETED до тех пор, пока приложение не будет запущено по другим причинам.

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

Элементы управления мультимедиа, полученные из PlaybackState

Для приложений, ориентированных на Android 13 (уровень API 33) и выше, система извлекает элементы управления мультимедиа из действий PlaybackState . Это позволяет системе отображать более богатый набор элементов управления, которые технически согласованы между телефонами и планшетными устройствами, а также соответствуют тому, как элементы управления мультимедиа отображаются на других платформах Android, таких как Android Auto и Android TV.

На рисунке 2 показан пример того, как это выглядит на телефоне и планшете соответственно.

Элементы управления мультимедиа с точки зрения того, как они выглядят на телефонах и планшетах, используя пример трека-образца, показывающего, как могут выглядеть кнопки
Рисунок 2: Элементы управления мультимедиа на телефонах и планшетах

До Android 13 система отображала до пяти действий из уведомления MediaStyle в том порядке, в котором они были добавлены . В компактном режиме — например, в свернутом быстром меню настроек — отображалось до трех действий, указанных с помощью setShowActionsInCompactView() .

Начиная с Android 13, система отображает до пяти кнопок действий на основе PlaybackState , как описано в следующей таблице. В компактном режиме будут отображаться только первые три слота действий. Для приложений, которые не предназначены для Android 13 или не включают PlaybackState , система будет отображать элементы управления на основе списка Action добавленного в уведомление MediaStyle , как описано в предыдущем абзаце.

Слот Действие Критерии
1 Играть Текущее состояние PlaybackState может быть одним из следующих:
  • STATE_NONE
  • STATE_STOPPED
  • STATE_PAUSED
  • STATE_ERROR
Загрузка спиннера Текущее состояние PlaybackState может быть одним из следующих:
  • STATE_CONNECTING
  • STATE_BUFFERING
Пауза Текущее состояние PlaybackState не соответствует ни одному из вышеперечисленных.
2 Предыдущий Действия PlaybackState включают ACTION_SKIP_TO_PREVIOUS .
Обычай Действия PlaybackState не включают ACTION_SKIP_TO_PREVIOUS , а пользовательские действия PlaybackState включают пользовательское действие, которое еще не было размещено.
Пустой Дополнительные параметры PlaybackState включают true логическое значение для ключа SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV .
3 Следующий Действия PlaybackState включают ACTION_SKIP_TO_NEXT .
Обычай Действия PlaybackState не включают ACTION_SKIP_TO_NEXT , а пользовательские действия PlaybackState включают пользовательское действие, которое еще не было размещено.
Пустой Дополнительные параметры PlaybackState включают true логическое значение для ключа SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT .
4 Обычай Пользовательские действия PlaybackState включают пользовательское действие, которое еще не было размещено.
5 Обычай Пользовательские действия PlaybackState включают пользовательское действие, которое еще не было размещено.

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

Цветовая тема приложения автоматически применяется к содержимому WebView

Для приложений, ориентированных на Android 13 (уровень API 33) или выше, метод setForceDark() устарел, что приводит к нулевой операции при вызове метода.

Вместо этого WebView теперь всегда устанавливает медиа-запрос prefers-color-scheme в соответствии с атрибутом темы приложения isLightTheme . Другими словами, если isLightTheme имеет true или не указано, prefers-color-scheme имеет значение light ; в противном случае — dark . Такое поведение означает, что светлый или темный стиль веб-контента применяется автоматически в соответствии с темой приложения, если контент его поддерживает.

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

Если вам все еще нужно настроить поведение цветовой темы вашего приложения, используйте вместо этого метод setAlgorithmicDarkeningAllowed() . Для обратной совместимости с предыдущими версиями Android мы рекомендуем использовать эквивалентный метод setAlgorithmicDarkeningAllowed() в AndroidX.

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

Связность

BluetoothAdapter#enable() и BluetoothAdapter#disable() устарели

Для приложений, ориентированных на Android 13 (уровень API 33) или выше, методы BluetoothAdapter#enable() и BluetoothAdapter#disable() устарели и всегда возвращают false .

Следующие типы приложений освобождены от этих изменений:

  • Приложения владельца устройства
  • Приложения владельца профиля
  • Системные приложения

Сервисы Google Play

Требуется разрешение для рекламного идентификатора

Приложения, использующие рекламный идентификатор сервисов Google Play и предназначенные для Android 13 (уровень API 33) и выше, должны объявить обычное разрешение AD_ID в файле манифеста своего приложения следующим образом:

<manifest ...>
    <!-- Required only if your app targets Android 13 or higher. -->
    <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

    <application ...>
        ...
    </application>
</manifest>

Если ваше приложение не заявляет это разрешение при работе на Android 13 или выше, рекламный идентификатор автоматически удаляется и заменяется строкой нулей.

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

Дополнительную информацию см. в разделе «Идентификатор рекламы» в справке Play Console.

Обновлены ограничения, не относящиеся к SDK

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

Если ваше приложение не ориентировано на Android 13, некоторые из этих изменений могут не сразу вас затронуть. Однако, хотя вы в настоящее время можете использовать некоторые интерфейсы не SDK ( в зависимости от целевого уровня API вашего приложения ), использование любого метода или поля не SDK всегда несет высокий риск поломки вашего приложения.

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

Чтобы узнать больше об изменениях в этой версии Android, см. Обновления ограничений интерфейсов, не относящихся к SDK, в Android 13. Чтобы узнать больше об интерфейсах, не относящихся к SDK, см. Ограничения интерфейсов, не относящихся к SDK .