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