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

До Android 13 система отображала до пяти действий из уведомления MediaStyle в порядке их добавления . В компактном режиме — например, в свернутых быстрых настройках — отображалось до трех действий, указанных с помощью setShowActionsInCompactView() .
Начиная с Android 13, система отображает до пяти кнопок действий в зависимости от PlaybackState , как описано в следующей таблице. В компактном режиме отображаются только первые три слота действий. Для приложений, не ориентированных на Android 13 или не содержащих PlaybackState , система будет отображать элементы управления на основе списка Action , добавленного к уведомлению MediaStyle , как описано в предыдущем абзаце.
| Слот | Действие | Критерии |
|---|---|---|
| 1 | Играть | Текущее состояние объекта PlaybackState может быть одним из следующих:
|
| Загрузочный вращающийся индикатор | Текущее состояние объекта PlaybackState может быть одним из следующих:
| |
| Пауза | Текущее состояние объекта 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 указано в манифесте библиотеки, то по умолчанию это разрешение объединяется с файлом манифеста вашего приложения. В этом случае вам не нужно указывать это разрешение в файле манифеста вашего приложения.
Для получения более подробной информации см. раздел «Идентификатор рекламы» в справке 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» .