В Android 10 (уровень API 29) представлен ряд функций и изменений поведения для лучшей защиты конфиденциальности пользователей. Эти изменения расширяют прозрачность и контроль пользователей над своими данными и возможностями, которые они предоставляют приложениям. Эти функции могут означать, что конкретное поведение или данные, от которых зависит ваше приложение, могут вести себя иначе, чем в более старых версиях платформы. Влияние на ваше приложение должно быть минимальным, если оно соответствует современным рекомендациям по обработке пользовательских данных.
На этой странице приводится сводная информация о каждом изменении.
Основные изменения
В этом разделе представлены ключевые изменения в Android 10, связанные с конфиденциальностью.
Доступ к внешнему хранилищу ограничен файлами приложений и мультимедиа.
По умолчанию приложениям, предназначенным для Android 10 и более поздних версий, предоставляется ограниченный доступ к внешнему хранилищу или хранилищу с ограниченной областью действия . Такие приложения могут видеть следующие типы файлов на внешнем устройстве хранения данных без необходимости запрашивать какие-либо разрешения пользователя, связанные с хранилищем:
- Файлы в каталоге приложения, доступ к которым осуществляется с помощью
getExternalFilesDir()
. - Фотографии, видео и аудиоклипы, созданные приложением из медиа-магазина .
Чтобы узнать больше о хранилище с заданной областью, а также о том, как делиться, получать доступ и изменять файлы, сохраненные на внешних устройствах хранения, см. руководства по управлению файлами во внешнем хранилище , а также по доступу и изменению медиафайлов .
Доступ к местоположению устройства в фоновом режиме требует разрешения
Чтобы обеспечить дополнительный контроль, который пользователи имеют над доступом приложения к информации о местоположении, в Android 10 представлено разрешение ACCESS_BACKGROUND_LOCATION
.
В отличие от разрешений ACCESS_FINE_LOCATION
и ACCESS_COARSE_LOCATION
, разрешение ACCESS_BACKGROUND_LOCATION
влияет на доступ приложения к местоположению только тогда, когда оно работает в фоновом режиме. Считается, что приложение получает доступ к местоположению в фоновом режиме, если не выполняется одно из следующих условий:
- Видна активность, принадлежащая приложению.
В приложении запущена служба переднего плана, которая объявила тип
location
службы переднего плана .Чтобы объявить тип службы переднего плана для службы в вашем приложении, установите
targetSdkVersion
илиcompileSdkVersion
вашего приложения значение29
или выше. Узнайте больше о том, как службы переднего плана могут продолжать действия, инициированные пользователем, требующие доступа к местоположению.
Если ваше приложение создает и отслеживает геозоны и предназначено для Android 10 (уровень API 29) или более поздней версии, вы должны объявить разрешение ACCESS_BACKGROUND_LOCATION
.
Доступ предоставляется автоматически при настройке Android 9 или более ранней версии.
Если ваше приложение работает на Android 10 или выше, но ориентировано на Android 9 (уровень API 28) или ниже, платформа применяет следующее поведение:
- Если ваше приложение объявляет элемент
<uses-permission>
дляACCESS_FINE_LOCATION
илиACCESS_COARSE_LOCATION
, система автоматически добавляет элемент<uses-permission>
дляACCESS_BACKGROUND_LOCATION
во время установки. - Если ваше приложение запрашивает
ACCESS_FINE_LOCATION
илиACCESS_COARSE_LOCATION
, система автоматически добавляетACCESS_BACKGROUND_LOCATION
к запросу.
Доступ при обновлении устройства до Android 10
Если пользователь предоставляет вашему приложению доступ к местоположению устройства ( ACCESS_COARSE_LOCATION
или ACCESS_FINE_LOCATION
), а затем обновляет свое устройство с Android 9 до Android 10, система автоматически обновляет набор разрешений на основе местоположения, предоставленных вашему приложению. Набор разрешений, которые ваше приложение получает после обновления, зависит от целевой версии SDK и определенных разрешений, как показано в следующей таблице:
Таблица 1. Изменения состояния разрешения на определение местоположения после обновления устройства до Android 10
Целевая версия платформы | Грубо или мелко разрешение получено? | Фоновое разрешение определено в манифесте? | Обновлено состояние разрешений по умолчанию. |
---|---|---|---|
Андроид 10 | Да | Да | Доступ к переднему и фоновому режиму |
Андроид 10 | Да | Нет | Доступ только на переднем плане |
Андроид 10 | Нет | (Игнорируется системой) | Нет доступа |
Android 9 или более ранняя версия | Да | Автоматически добавляется системой во время обновления устройства. | Доступ к переднему и фоновому режиму |
Android 9 или более ранняя версия | Нет | (Игнорируется системой) | Нет доступа |
Обратите внимание, что пользователь может изменить этот уровень доступа даже после того, как система автоматически обновит доступ вашего приложения к местоположению устройства. Например, пользователь может ограничить доступ вашего приложения только к переднему плану или полностью отозвать доступ. Прежде чем пытаться получить доступ к местоположению устройства, особенно в службе переднего плана, ваше приложение должно проверить, разрешает ли пользователь вашему приложению получать эту информацию о местоположении.
Доступ отозван при обновлении целевого уровня API на устройствах Android 10.
Рассмотрим случай, когда ваше приложение уже установлено на устройстве под управлением Android 10. Если в этой ситуации вы обновите свое приложение до Android 10, устройство отзовет разрешение ACCESS_BACKGROUND_LOCATION
.
Дополнительную информацию о том, как получить местоположение устройства, когда ваше приложение работает в фоновом режиме, см. в руководстве по получению периодических обновлений местоположения .
Ограничения на запуск действий в фоновом режиме
Начиная с Android 10, система накладывает ограничения на запуск действий в фоновом режиме . Такое изменение поведения помогает свести к минимуму прерывания работы пользователя и позволяет ему лучше контролировать то, что отображается на экране. Пока ваше приложение начинает действия в результате взаимодействия с пользователем, эти ограничения, скорее всего, не затрагивают ваше приложение.
Чтобы узнать больше о рекомендуемой альтернативе запуску действий в фоновом режиме, ознакомьтесь с руководством по оповещению пользователей о срочных событиях в вашем приложении.
Идентификаторы и данные
В этом разделе перечислены изменения, относящиеся к работе с идентификаторами и данными устройств.
Удаление привязки контактов
Начиная с Android 10, платформа не отслеживает информацию о сходстве контактов. В результате, если ваше приложение выполняет поиск в контактах пользователя, результаты не сортируются по частоте взаимодействия.
Руководство по ContactsProvider
содержит уведомление с описанием конкретных полей и методов, которые устарели на всех устройствах, начиная с Android 10.
Рандомизация MAC-адреса
На устройствах под управлением Android 10 или более поздней версии система по умолчанию передает случайные MAC-адреса.
Если ваше приложение предназначено для корпоративного использования , платформа предоставляет API для нескольких операций, связанных с MAC-адресами:
- Получение случайного MAC-адреса. Приложения владельца устройства и приложения владельца профиля могут получить случайный MAC-адрес, назначенный определенной сети, с помощью вызова
getRandomizedMacAddress()
. - Получение фактического заводского MAC-адреса. Приложения владельца устройства могут получить фактический аппаратный MAC-адрес устройства, вызвав
getWifiMacAddress()
. Этот метод полезен для отслеживания парка устройств.
Ограничение доступа к файловой системе /proc/net
На устройствах под управлением Android 10 или более поздней версии приложения не могут получить доступ к /proc/net
, который содержит информацию о состоянии сети устройства. Приложения, которым необходим доступ к этой информации, например VPN, должны использовать класс NetworkStatsManager
или ConnectivityManager
.
Ограничение на несбрасываемые идентификаторы устройств
Начиная с Android 10, приложения должны иметь привилегированное разрешение READ_PRIVILEGED_PHONE_STATE
для доступа к несбрасываемым идентификаторам устройства, которые включают как IMEI, так и серийный номер.
Затронутые методы включают следующее:
-
Build
-
TelephonyManager
Если у вашего приложения нет разрешения и вы все равно пытаетесь запросить информацию о несбрасываемых идентификаторах, ответ платформы зависит от целевой версии SDK:
- Если ваше приложение предназначено для Android 10 или более поздней версии, возникает исключение
SecurityException
. - Если ваше приложение предназначено для Android 9 (уровень API 28) или более ранней версии, метод возвращает
null
данные или данные-заполнители, если приложение имеет разрешениеREAD_PHONE_STATE
. В противном случае возникаетSecurityException
.
Во многих случаях использования не требуются несбрасываемые идентификаторы устройств. Например, если ваше приложение использует несбрасываемые идентификаторы устройств для отслеживания рекламы или пользовательской аналитики, вместо этого используйте рекламный идентификатор Android для этих конкретных случаев использования. Чтобы узнать больше, ознакомьтесь с рекомендациями по использованию уникальных идентификаторов .
Ограниченный доступ к данным буфера обмена
Если ваше приложение не является редактором метода ввода по умолчанию (IME) или приложением, на котором в данный момент находится фокус, ваше приложение не может получить доступ к данным буфера обмена на Android 10 или более поздней версии.
Защита серийного номера USB-устройства
Если ваше приложение предназначено для Android 10 или более поздней версии, оно не сможет прочитать серийный номер, пока пользователь не предоставит вашему приложению разрешение на доступ к USB-устройству или аксессуару.
Подробнее о работе с USB-устройствами читайте в руководстве по настройке USB-хостов .
Камера и возможности подключения
В этом разделе перечислены изменения, относящиеся к метаданным камеры и API-интерфейсам подключения.
Ограничение доступа к данным камеры и метаданным
В Android 10 изменяется объем информации, которую метод getCameraCharacteristics()
возвращает по умолчанию. В частности, ваше приложение должно иметь разрешение CAMERA
, чтобы получить доступ к потенциально специфичным для устройства метаданным, которые включены в возвращаемое значение этого метода.
Подробнее об этих изменениях можно узнать в разделе о полях камеры, для которых требуется разрешение .
Ограничение на включение и отключение Wi-Fi
Приложения, предназначенные для Android 10 или более поздней версии, не могут включать или отключать Wi-Fi. Метод WifiManager.setWifiEnabled()
всегда возвращает false
.
Если вам нужно предлагать пользователям включать и отключать Wi-Fi, используйте панель настроек .
Ограничения на прямой доступ к настроенным сетям Wi-Fi
Для защиты конфиденциальности пользователей ручная настройка списка сетей Wi-Fi ограничена системными приложениями и контроллерами политики устройств (DPC) . Данный ЦОД может быть либо владельцем устройства, либо владельцем профиля.
Если ваше приложение предназначено для Android 10 или более поздней версии и не является системным приложением или ЦОД, то следующие методы не возвращают полезные данные:
Метод
getConfiguredNetworks()
всегда возвращает пустой список.Каждый метод сетевой операции, возвращающий целочисленное значение
addNetwork()
иupdateNetwork()
— всегда возвращает -1.Каждая сетевая операция, возвращающая логическое значение
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
иdisconnect()
— всегда возвращаетfalse
.
Если вашему приложению необходимо подключение к сетям Wi-Fi, используйте следующие альтернативные методы:
- Чтобы инициировать мгновенное локальное подключение к сети Wi-Fi, используйте
WifiNetworkSpecifier
в стандартном объектеNetworkRequest
. - Чтобы добавить сети Wi-Fi для предоставления пользователю доступа в Интернет, работайте с объектами
WifiNetworkSuggestion
. Вы можете добавлять и удалять сети, которые появляются в диалоговом окне выбора сети для автоматического подключения, вызываяaddNetworkSuggestions()
иremoveNetworkSuggestions()
соответственно. Эти методы не требуют каких-либо разрешений на определение местоположения.
Для некоторых API-интерфейсов телефонии, Bluetooth и Wi-Fi требуется разрешение FINE для определения местоположения.
Если ваше приложение предназначено для Android 10 или более поздней версии, оно должно иметь разрешение ACCESS_FINE_LOCATION
, чтобы использовать несколько методов в API Wi-Fi, Wi-Fi Aware или Bluetooth. В следующих разделах перечислены затронутые классы и методы.
Телефония
-
TelephonyManager
-
getCellLocation()
-
getAllCellInfo()
-
requestNetworkScan()
-
requestCellInfoUpdate()
-
getAvailableNetworks()
-
getServiceState()
-
-
TelephonyScanManager
-
requestNetworkScan()
-
-
TelephonyScanManager.NetworkScanCallback
-
onResults()
-
-
PhoneStateListener
-
onCellLocationChanged()
-
onCellInfoChanged()
-
onServiceStateChanged()
-
Wi-Fi
-
WifiManager
-
startScan()
-
getScanResults()
-
getConnectionInfo()
-
getConfiguredNetworks()
-
-
WifiAwareManager
-
WifiP2pManager
-
WifiRttManager
Bluetooth
-
BluetoothAdapter
-
startDiscovery()
-
startLeScan()
-
-
BluetoothAdapter.LeScanCallback
-
BluetoothLeScanner
-
startScan()
-
Разрешения
В этом разделе описаны обновления модели разрешений Android.
Ограниченный доступ к содержимому экрана
Чтобы защитить содержимое экрана пользователей, Android 10 предотвращает автоматический доступ к содержимому экрана устройства, изменяя область разрешений READ_FRAME_BUFFER
, CAPTURE_VIDEO_OUTPUT
и CAPTURE_SECURE_VIDEO_OUTPUT
. Начиная с Android 10, эти разрешения доступны только по подписи .
Приложения, которым необходим доступ к содержимому экрана устройства, должны использовать API MediaProjection
, который отображает запрос на согласие пользователя.
Проверка разрешений для пользователей в устаревших приложениях
Если ваше приложение предназначено для Android 5.1 (уровень API 22) или ниже, пользователи видят экран разрешений при первом использовании вашего приложения на устройстве под управлением Android 10 или более поздней версии, как показано на рис. 1. Этот экран дает пользователям возможность отозвать доступ к разрешениям, которые система ранее предоставила вашему приложению во время установки.
Распознавание физической активности
В Android 10 представлено разрешение среды выполнения android.permission.ACTIVITY_RECOGNITION
для приложений, которым необходимо определять количество шагов пользователя или классифицировать физическую активность пользователя, например ходьбу, езду на велосипеде или передвижение в автомобиле. Это сделано для того, чтобы пользователи могли видеть, как данные датчиков устройства используются в настройках.
Некоторые библиотеки в сервисах Google Play, такие как API распознавания активности и API Google Fit , не предоставляют результаты, если пользователь не предоставил вашему приложению такое разрешение.
Единственными встроенными датчиками устройства, требующими заявления об этом разрешении, являются датчики счетчика шагов и детектора шагов .
Если ваше приложение предназначено для Android 9 (уровень API 28) или ниже, система автоматически предоставляет разрешение android.permission.ACTIVITY_RECOGNITION
вашему приложению, если это необходимо, если ваше приложение удовлетворяет каждому из следующих условий:
- Файл манифеста включает разрешение
com.google.android.gms.permission.ACTIVITY_RECOGNITION
. - Файл манифеста не содержит разрешения
android.permission.ACTIVITY_RECOGNITION
.
Если system-auto предоставляет разрешение android.permission.ACTIVITY_RECOGNITION
, ваше приложение сохранит это разрешение после обновления приложения до Android 10. Однако пользователь может отозвать это разрешение в любое время в настройках системы.
Группы разрешений удалены из пользовательского интерфейса.
Начиная с Android 10, приложения не могут узнать, как разрешения сгруппированы в пользовательском интерфейсе.
,В Android 10 (уровень API 29) представлен ряд функций и изменений поведения для лучшей защиты конфиденциальности пользователей. Эти изменения расширяют прозрачность и контроль пользователей над своими данными и возможностями, которые они предоставляют приложениям. Эти функции могут означать, что конкретное поведение или данные, от которых зависит ваше приложение, могут вести себя иначе, чем в более старых версиях платформы. Влияние на ваше приложение должно быть минимальным, если оно соответствует современным рекомендациям по обработке пользовательских данных.
На этой странице приводится сводная информация о каждом изменении.
Основные изменения
В этом разделе представлены ключевые изменения в Android 10, связанные с конфиденциальностью.
Доступ к внешнему хранилищу ограничен файлами приложений и мультимедиа.
По умолчанию приложениям, предназначенным для Android 10 и более поздних версий, предоставляется ограниченный доступ к внешнему хранилищу или хранилищу с ограниченной областью действия . Такие приложения могут видеть следующие типы файлов на внешнем устройстве хранения данных без необходимости запрашивать какие-либо разрешения пользователя, связанные с хранилищем:
- Файлы в каталоге приложения, доступ к которым осуществляется с помощью
getExternalFilesDir()
. - Фотографии, видео и аудиоклипы, созданные приложением из медиа-магазина .
Чтобы узнать больше о хранилище с заданной областью, а также о том, как делиться, получать доступ и изменять файлы, сохраненные на внешних устройствах хранения, см. руководства по управлению файлами во внешнем хранилище , а также по доступу и изменению медиафайлов .
Доступ к местоположению устройства в фоновом режиме требует разрешения
Чтобы обеспечить дополнительный контроль, который пользователи имеют над доступом приложения к информации о местоположении, в Android 10 представлено разрешение ACCESS_BACKGROUND_LOCATION
.
В отличие от разрешений ACCESS_FINE_LOCATION
и ACCESS_COARSE_LOCATION
, разрешение ACCESS_BACKGROUND_LOCATION
влияет на доступ приложения к местоположению только тогда, когда оно работает в фоновом режиме. Считается, что приложение получает доступ к местоположению в фоновом режиме, если не выполняется одно из следующих условий:
- Видна активность, принадлежащая приложению.
В приложении запущена служба переднего плана, которая объявила тип
location
службы переднего плана .Чтобы объявить тип службы переднего плана для службы в вашем приложении, установите
targetSdkVersion
илиcompileSdkVersion
вашего приложения значение29
или выше. Узнайте больше о том, как службы переднего плана могут продолжать действия, инициированные пользователем, требующие доступа к местоположению.
Если ваше приложение создает и отслеживает геозоны и предназначено для Android 10 (уровень API 29) или более поздней версии, вы должны объявить разрешение ACCESS_BACKGROUND_LOCATION
.
Доступ предоставляется автоматически при настройке Android 9 или более ранней версии.
Если ваше приложение работает на Android 10 или выше, но ориентировано на Android 9 (уровень API 28) или ниже, платформа применяет следующее поведение:
- Если ваше приложение объявляет элемент
<uses-permission>
дляACCESS_FINE_LOCATION
илиACCESS_COARSE_LOCATION
, система автоматически добавляет элемент<uses-permission>
дляACCESS_BACKGROUND_LOCATION
во время установки. - Если ваше приложение запрашивает
ACCESS_FINE_LOCATION
илиACCESS_COARSE_LOCATION
, система автоматически добавляетACCESS_BACKGROUND_LOCATION
к запросу.
Доступ при обновлении устройства до Android 10
Если пользователь предоставляет вашему приложению доступ к местоположению устройства ( ACCESS_COARSE_LOCATION
или ACCESS_FINE_LOCATION
), а затем обновляет свое устройство с Android 9 до Android 10, система автоматически обновляет набор разрешений на основе местоположения, предоставленных вашему приложению. Набор разрешений, которые ваше приложение получает после обновления, зависит от целевой версии SDK и определенных разрешений, как показано в следующей таблице:
Таблица 1. Изменения состояния разрешения на определение местоположения после обновления устройства до Android 10
Целевая версия платформы | Грубо или мелко разрешение получено? | Фоновое разрешение определено в манифесте? | Обновлено состояние разрешений по умолчанию. |
---|---|---|---|
Андроид 10 | Да | Да | Доступ к переднему и фоновому режиму |
Андроид 10 | Да | Нет | Доступ только на переднем плане |
Андроид 10 | Нет | (Игнорируется системой) | Нет доступа |
Android 9 или более ранняя версия | Да | Автоматически добавляется системой во время обновления устройства. | Доступ к переднему и фоновому режиму |
Android 9 или более ранняя версия | Нет | (Игнорируется системой) | Нет доступа |
Обратите внимание, что пользователь может изменить этот уровень доступа даже после того, как система автоматически обновит доступ вашего приложения к местоположению устройства. Например, пользователь может ограничить доступ вашего приложения только к переднему плану или полностью отозвать доступ. Прежде чем пытаться получить доступ к местоположению устройства, особенно в службе переднего плана, ваше приложение должно проверить, разрешает ли пользователь вашему приложению получать эту информацию о местоположении.
Доступ отозван при обновлении целевого уровня API на устройствах Android 10.
Рассмотрим случай, когда ваше приложение уже установлено на устройстве под управлением Android 10. Если в этой ситуации вы обновите свое приложение до Android 10, устройство отзовет разрешение ACCESS_BACKGROUND_LOCATION
.
Дополнительную информацию о том, как получить местоположение устройства, когда ваше приложение работает в фоновом режиме, см. в руководстве по получению периодических обновлений местоположения .
Ограничения на запуск действий в фоновом режиме
Начиная с Android 10, система накладывает ограничения на запуск действий в фоновом режиме . Такое изменение поведения помогает свести к минимуму прерывания работы пользователя и позволяет ему лучше контролировать то, что отображается на экране. Пока ваше приложение начинает действия в результате взаимодействия с пользователем, эти ограничения, скорее всего, не затрагивают ваше приложение.
Чтобы узнать больше о рекомендуемой альтернативе запуску действий в фоновом режиме, ознакомьтесь с руководством по оповещению пользователей о срочных событиях в вашем приложении.
Идентификаторы и данные
В этом разделе перечислены изменения, относящиеся к работе с идентификаторами и данными устройств.
Удаление привязки контактов
Начиная с Android 10, платформа не отслеживает информацию о сходстве контактов. В результате, если ваше приложение выполняет поиск по контактам пользователя, результаты не сортируются по частоте взаимодействия.
Руководство по ContactsProvider
содержит уведомление с описанием конкретных полей и методов, которые устарели на всех устройствах, начиная с Android 10.
Рандомизация MAC-адреса
На устройствах под управлением Android 10 или более поздней версии система по умолчанию передает случайные MAC-адреса.
Если ваше приложение предназначено для корпоративного использования , платформа предоставляет API для нескольких операций, связанных с MAC-адресами:
- Получение случайного MAC-адреса. Приложения владельца устройства и приложения владельца профиля могут получить случайный MAC-адрес, назначенный определенной сети, с помощью вызова
getRandomizedMacAddress()
. - Получение фактического заводского MAC-адреса. Приложения владельца устройства могут получить фактический аппаратный MAC-адрес устройства, вызвав
getWifiMacAddress()
. Этот метод полезен для отслеживания парка устройств.
Ограничение доступа к файловой системе /proc/net
На устройствах под управлением Android 10 или более поздней версии приложения не могут получить доступ к /proc/net
, который содержит информацию о состоянии сети устройства. Приложения, которым необходим доступ к этой информации, например VPN, должны использовать класс NetworkStatsManager
или ConnectivityManager
.
Ограничение на несбрасываемые идентификаторы устройств
Начиная с Android 10, приложения должны иметь привилегированное разрешение READ_PRIVILEGED_PHONE_STATE
для доступа к несбрасываемым идентификаторам устройства, которые включают как IMEI, так и серийный номер.
Затронутые методы включают следующее:
-
Build
-
TelephonyManager
Если у вашего приложения нет разрешения и вы все равно пытаетесь запросить информацию о несбрасываемых идентификаторах, ответ платформы зависит от целевой версии SDK:
- Если ваше приложение предназначено для Android 10 или более поздней версии, возникает исключение
SecurityException
. - Если ваше приложение предназначено для Android 9 (уровень API 28) или более ранней версии, метод возвращает
null
данные или данные-заполнители, если приложение имеет разрешениеREAD_PHONE_STATE
. В противном случае возникаетSecurityException
.
Во многих случаях использования не требуются несбрасываемые идентификаторы устройств. Например, если ваше приложение использует несбрасываемые идентификаторы устройств для отслеживания рекламы или пользовательской аналитики, вместо этого используйте рекламный идентификатор Android для этих конкретных случаев использования. Чтобы узнать больше, ознакомьтесь с рекомендациями по использованию уникальных идентификаторов .
Ограниченный доступ к данным буфера обмена
Если ваше приложение не является редактором метода ввода по умолчанию (IME) или приложением, на котором в данный момент находится фокус, ваше приложение не может получить доступ к данным буфера обмена на Android 10 или более поздней версии.
Защита серийного номера USB-устройства
Если ваше приложение предназначено для Android 10 или более поздней версии, оно не сможет прочитать серийный номер, пока пользователь не предоставит вашему приложению разрешение на доступ к USB-устройству или аксессуару.
Подробнее о работе с USB-устройствами читайте в руководстве по настройке USB-хостов .
Камера и возможности подключения
В этом разделе перечислены изменения, относящиеся к метаданным камеры и API-интерфейсам подключения.
Ограничение доступа к данным камеры и метаданным
В Android 10 изменяется объем информации, которую метод getCameraCharacteristics()
возвращает по умолчанию. В частности, ваше приложение должно иметь разрешение CAMERA
, чтобы получить доступ к потенциально специфичным для устройства метаданным, которые включены в возвращаемое значение этого метода.
Подробнее об этих изменениях можно узнать в разделе о полях камеры, для которых требуется разрешение .
Ограничение на включение и отключение Wi-Fi
Приложения, предназначенные для Android 10 или более поздней версии, не могут включать или отключать Wi-Fi. Метод WifiManager.setWifiEnabled()
всегда возвращает false
.
Если вам нужно предлагать пользователям включать и отключать Wi-Fi, используйте панель настроек .
Ограничения на прямой доступ к настроенным сетям Wi-Fi
Для защиты конфиденциальности пользователей ручная настройка списка сетей Wi-Fi ограничена системными приложениями и контроллерами политики устройств (DPC) . Данный ЦОД может быть либо владельцем устройства, либо владельцем профиля.
Если ваше приложение предназначено для Android 10 или более поздней версии и не является системным приложением или ЦОД, то следующие методы не возвращают полезные данные:
Метод
getConfiguredNetworks()
всегда возвращает пустой список.Каждый метод сетевой операции, возвращающий целочисленное значение
addNetwork()
иupdateNetwork()
— всегда возвращает -1.Каждая сетевая операция, возвращающая логическое значение
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
иdisconnect()
— всегда возвращаетfalse
.
Если вашему приложению необходимо подключение к сетям Wi-Fi, используйте следующие альтернативные методы:
- Чтобы инициировать мгновенное локальное подключение к сети Wi-Fi, используйте
WifiNetworkSpecifier
в стандартном объектеNetworkRequest
. - Чтобы добавить сети Wi-Fi для предоставления пользователю доступа в Интернет, работайте с объектами
WifiNetworkSuggestion
. Вы можете добавлять и удалять сети, которые появляются в диалоговом окне выбора сети для автоматического подключения, вызываяaddNetworkSuggestions()
иremoveNetworkSuggestions()
соответственно. Эти методы не требуют каких-либо разрешений на определение местоположения.
Для некоторых API-интерфейсов телефонии, Bluetooth и Wi-Fi требуется разрешение FINE для определения местоположения.
Если ваше приложение предназначено для Android 10 или более поздней версии, оно должно иметь разрешение ACCESS_FINE_LOCATION
, чтобы использовать несколько методов в API Wi-Fi, Wi-Fi Aware или Bluetooth. В следующих разделах перечислены затронутые классы и методы.
Телефония
-
TelephonyManager
-
getCellLocation()
-
getAllCellInfo()
-
requestNetworkScan()
-
requestCellInfoUpdate()
-
getAvailableNetworks()
-
getServiceState()
-
-
TelephonyScanManager
-
requestNetworkScan()
-
-
TelephonyScanManager.NetworkScanCallback
-
onResults()
-
-
PhoneStateListener
-
onCellLocationChanged()
-
onCellInfoChanged()
-
onServiceStateChanged()
-
Wi-Fi
-
WifiManager
-
startScan()
-
getScanResults()
-
getConnectionInfo()
-
getConfiguredNetworks()
-
-
WifiAwareManager
-
WifiP2pManager
-
WifiRttManager
Bluetooth
-
BluetoothAdapter
-
startDiscovery()
-
startLeScan()
-
-
BluetoothAdapter.LeScanCallback
-
BluetoothLeScanner
-
startScan()
-
Разрешения
В этом разделе описаны обновления модели разрешений Android.
Ограниченный доступ к содержимому экрана
Чтобы защитить содержимое экрана пользователей, Android 10 предотвращает автоматический доступ к содержимому экрана устройства, изменяя область разрешений READ_FRAME_BUFFER
, CAPTURE_VIDEO_OUTPUT
и CAPTURE_SECURE_VIDEO_OUTPUT
. Начиная с Android 10, эти разрешения доступны только по подписи .
Приложения, которым необходим доступ к содержимому экрана устройства, должны использовать API MediaProjection
, который отображает запрос на согласие пользователя.
Проверка разрешений для пользователей в устаревших приложениях
Если ваше приложение предназначено для Android 5.1 (уровень API 22) или ниже, пользователи видят экран разрешений при первом использовании вашего приложения на устройстве под управлением Android 10 или более поздней версии, как показано на рис. 1. Этот экран дает пользователям возможность отозвать доступ к разрешениям, которые система ранее предоставила вашему приложению во время установки.
Распознавание физической активности
В Android 10 представлено разрешение среды выполнения android.permission.ACTIVITY_RECOGNITION
для приложений, которым необходимо определять количество шагов пользователя или классифицировать физическую активность пользователя, например ходьбу, езду на велосипеде или передвижение в автомобиле. Это сделано для того, чтобы пользователи могли видеть, как данные датчиков устройства используются в настройках.
Некоторые библиотеки в сервисах Google Play, такие как API распознавания активности и API Google Fit , не предоставляют результаты, если пользователь не предоставил вашему приложению такое разрешение.
Единственными встроенными датчиками устройства, требующими заявления об этом разрешении, являются датчики счетчика шагов и детектора шагов .
Если ваше приложение предназначено для Android 9 (уровень API 28) или ниже, система автоматически предоставляет разрешение android.permission.ACTIVITY_RECOGNITION
вашему приложению, если это необходимо, если ваше приложение удовлетворяет каждому из следующих условий:
- Файл манифеста включает разрешение
com.google.android.gms.permission.ACTIVITY_RECOGNITION
. - Файл манифеста не содержит разрешения
android.permission.ACTIVITY_RECOGNITION
.
Если system-auto предоставляет разрешение android.permission.ACTIVITY_RECOGNITION
, ваше приложение сохранит это разрешение после обновления приложения до Android 10. Однако пользователь может отозвать это разрешение в любое время в настройках системы.
Группы разрешений удалены из пользовательского интерфейса.
Начиная с Android 10, приложения не могут узнать, как разрешения сгруппированы в пользовательском интерфейсе.
,В Android 10 (уровень API 29) представлен ряд функций и изменений поведения для лучшей защиты конфиденциальности пользователей. Эти изменения расширяют прозрачность и контроль пользователей над своими данными и возможностями, которые они предоставляют приложениям. Эти функции могут означать, что конкретное поведение или данные, от которых зависит ваше приложение, могут вести себя иначе, чем в более старых версиях платформы. Влияние на ваше приложение должно быть минимальным, если оно соответствует современным рекомендациям по обработке пользовательских данных.
На этой странице приводится сводная информация о каждом изменении.
Основные изменения
В этом разделе представлены ключевые изменения в Android 10, связанные с конфиденциальностью.
Доступ к внешнему хранилищу ограничен файлами приложений и мультимедиа.
По умолчанию приложениям, предназначенным для Android 10 и более поздних версий, предоставляется ограниченный доступ к внешнему хранилищу или хранилищу с ограниченной областью действия . Такие приложения могут видеть следующие типы файлов на внешнем устройстве хранения данных без необходимости запрашивать какие-либо разрешения пользователя, связанные с хранилищем:
- Файлы в каталоге приложения, доступ к которым осуществляется с помощью
getExternalFilesDir()
. - Фотографии, видео и аудиоклипы, созданные приложением из медиа-магазина .
Чтобы узнать больше о хранилище с заданной областью, а также о том, как делиться, получать доступ и изменять файлы, сохраненные на внешних устройствах хранения, см. руководства по управлению файлами во внешнем хранилище , а также по доступу и изменению медиафайлов .
Доступ к местоположению устройства в фоновом режиме требует разрешения
Чтобы обеспечить дополнительный контроль, который пользователи имеют над доступом приложения к информации о местоположении, в Android 10 представлено разрешение ACCESS_BACKGROUND_LOCATION
.
В отличие от разрешений ACCESS_FINE_LOCATION
и ACCESS_COARSE_LOCATION
, разрешение ACCESS_BACKGROUND_LOCATION
влияет на доступ приложения к местоположению, когда оно работает в фоновом режиме. Считается, что приложение обращается к месту в фоновом режиме, если только одно из следующих условий не выполнено:
- Заявление, принадлежащее приложению, видна.
В приложении управляет сервис переднего плана, который объявил
location
обслуживания переднего плана .Чтобы объявить тип обслуживания переднего плана для службы в вашем приложении, установите
targetSdkVersion
вашего приложения илиcompileSdkVersion
до29
или выше. Узнайте больше о том, как службы переднего плана могут продолжать инициированные пользователем действия , которые требуют доступа к местоположению.
Если ваше приложение создает и отслеживает геозию и нацелена на Android 10 (API -уровень 29) или выше, вы должны объявить разрешение ACCESS_BACKGROUND_LOCATION
.
Доступ к предоставлению автоматически при нацеливании на Android 9 или ниже
Если ваше приложение работает на Android 10 или выше, но нацелен на Android 9 (API -уровень 28) или ниже, платформа применяет следующее поведение:
- Если ваше приложение объявляет элемент
<uses-permission>
дляACCESS_FINE_LOCATION
илиACCESS_COARSE_LOCATION
, система автоматически добавляет элемент<uses-permission>
дляACCESS_BACKGROUND_LOCATION
во время установки. - Если ваше приложение запрашивает либо
ACCESS_FINE_LOCATION
, либоACCESS_COARSE_LOCATION
, система автоматически добавляетACCESS_BACKGROUND_LOCATION
в запрос.
Доступ при обновлении устройства до Android 10
Если пользователь предоставляет ваше приложение доступ к местоположению устройства-либо ACCESS_COARSE_LOCATION
, либо ACCESS_FINE_LOCATION
-затем обновляет их устройство от Android 9 до Android 10, система автоматически обновляет набор разрешений на основе местоположения, предоставленных вашему приложению. Набор разрешений, которые получает ваше приложение после обновления, зависит от ее целевой версии SDK и его определенных разрешений, как показано в следующей таблице:
Таблица 1. Изменения в состоянии разрешения на местоположение после обновления устройства до Android 10
Целевая платформа версия | Грубо или хорошо разрешение предоставлено? | Фоновое разрешение определяется в манифесте? | Обновленное состояние разрешения по умолчанию |
---|---|---|---|
Android 10 | Да | Да | Доступ на передний план и фоновый |
Android 10 | Да | Нет | Только передний план |
Android 10 | Нет | (Игнорируется системой) | Нет доступа |
Android 9 или ниже | Да | Автоматически добавлено системой при времени обновления устройства | Доступ на передний план и фоновый |
Android 9 или ниже | Нет | (Игнорируется системой) | Нет доступа |
Обратите внимание, что пользователь может изменить этот уровень доступа даже после того, как система автоматически обновляет доступ вашего приложения к местоположению устройства. Например, пользователь может уменьшить доступ вашего приложения только на передний план или полностью отозвать доступ. Прежде чем попытаться получить доступ к местоположению устройства, особенно в рамках службы переднего плана, ваше приложение должно проверить, позволяет ли пользователь приложение получать информацию об этом месте.
Доступ отменен при обновлении уровня целевого API на устройствах Android 10
Рассмотрим случай, когда ваше приложение уже установлено на устройстве, которое запускает Android 10. Если вы обновляете свое приложение для нацеливания на Android 10 в этой ситуации, устройство отозван разрешение ACCESS_BACKGROUND_LOCATION
.
Для получения дополнительной информации о том, как получить местоположение устройства, пока ваше приложение находится в фоновом режиме, см. Руководство по получению периодических обновлений местоположения .
Ограничения на начальные действия с фона
Начиная с Android 10, система накладывает ограничения на начальные действия с фона . Такое изменение поведения помогает минимизировать прерывания для пользователя и обеспечивает более управляющего пользователем контроль над тем, что показано на их экране. Пока ваше приложение начинает действия в качестве прямого результата взаимодействия с пользователем, ваше приложение, скорее всего, не влияет на эти ограничения.
Чтобы узнать больше о рекомендуемой альтернативе начальной деятельности с фона, см. Руководство о том, как предупредить пользователей о чувствительных ко времени событиях в вашем приложении.
Идентификаторы и данные
В этом разделе перечислены изменения, специфичные для работы с идентификаторами устройства и данными.
Удаление сродства контактов
Начиная с Android 10, платформа не отслеживает информацию о сродстве контактов. В результате, если ваше приложение проводит поиск на контактах пользователя, результаты не упорядочены частотой взаимодействия.
Руководство по ContactsProvider
содержит уведомление, описывающее конкретные поля и методы, которые устарели на всех устройствах, начиная с Android 10.
Рандомизация MAC-адреса
На устройствах, которые запускаются Android 10 или выше, система по умолчанию передает рандомизированные MAC -адреса.
Если ваше приложение обрабатывает вариант использования предприятия , платформа предоставляет API для нескольких операций, связанных с MAC -адресами:
- Получить рандомизированный MAC -адрес: приложения владельца устройства и приложения владельца профиля могут извлечь рандомизированный MAC -адрес, назначенный конкретной сети, вызывая
getRandomizedMacAddress()
. - Получите фактический, заводской MAC -адрес: приложения владельца устройства могут получить фактический аппаратный MAC -адрес устройства, вызывая
getWifiMacAddress()
. Этот метод полезен для отслеживания парков устройств.
Ограничение на доступ к /proc /net файловая система
На устройствах, которые запускаются Android 10 или выше, приложения не могут получить доступ /proc/net
, которая включает информацию о состоянии сети устройства. Приложения, которые нуждаются в доступе к этой информации, такой как VPNS, должны использовать класс NetworkStatsManager
или ConnectivityManager
.
Ограничение на идентификаторы устройств, не разрешающих,
Начиная с Android 10, приложения должны иметь привилегированное разрешение READ_PRIVILEGED_PHONE_STATE
, чтобы получить доступ к неретируемым идентификаторам устройства, которые включают как IMEI, так и серийный номер.
Пострадавшие методы включают следующее:
-
Build
-
TelephonyManager
Если в вашем приложении нет разрешения, и вы все равно пытаетесь запрашивать информацию о неретируемых идентификаторах, ответ платформы варьируется в зависимости от целевой версии SDK:
- Если ваше приложение предназначено для Android 10 или выше, происходит
SecurityException
. - Если ваше приложение предназначено для Android 9 (API -уровень 28) или ниже, метод возвращает данные
null
или заполнителе, если в приложении есть разрешениеREAD_PHONE_STATE
. В противном случае происходитSecurityException
.
Многие варианты использования не нуждаются в неретентных идентификаторах устройств. Например, если в вашем приложении используются идентификаторы устройств, не разрешаемые для целей AD-отслеживания или пользовательской аналитики, вместо этого используйте идентификатор рекламы Android для этих конкретных вариантов использования. Чтобы узнать больше, увидеть лучшие практики для уникальных идентификаторов .
Ограниченный доступ к данным буфера обмена
Если ваше приложение не является редактором метода ввода по умолчанию (IME) или является приложением, которое в настоящее время имеет фокус, ваше приложение не может получить доступ к данным буфера об буферизации на Android 10 или выше.
Защита серийного номера USB -устройства
Если ваше приложение предназначено для Android 10 или выше, ваше приложение не может прочитать серийный номер, пока пользователь не предоставит вашему приложению разрешение на доступ к устройству USB или аксессуару.
Чтобы узнать больше о работе с USB -устройствами, см. Руководство по настройке USB -хостов .
Камера и подключение
В этом разделе перечислены изменения, специфичные для метаданных камеры и API -файлов подключения.
Ограничение на доступ к деталям камеры и метаданным
Android 10 изменяет широту информации, которую метод getCameraCharacteristics()
возвращает по умолчанию. В частности, ваше приложение должно иметь разрешение CAMERA
, чтобы получить доступ к потенциально специфичным для устройства метаданные, которые включены в возвращаемое значение этого метода.
Чтобы узнать больше об этих изменениях, см. Раздел о полях камеры, которые требуют разрешения .
Ограничение на включение и отключение Wi-Fi
Приложения, нацеленные на Android 10 или выше, не могут включить или отключить Wi-Fi. Метод WifiManager.setWifiEnabled()
всегда возвращает false
.
Если вам нужно предложить пользователям включить и отключить Wi-Fi, используйте панель настроек .
Ограничения на прямой доступ к настроенным сетям Wi-Fi
Чтобы защитить конфиденциальность пользователей, ручная конфигурация списка сетей Wi-Fi ограничена системными приложениями и контроллерами политики устройств (DPCS) . Данный DPC может быть либо владельцем устройства, либо владельцем профиля.
Если ваше приложение предназначено для Android 10 или выше, и это не системное приложение или DPC, то следующие методы не возвращают полезные данные:
Метод
getConfiguredNetworks()
всегда возвращает пустой список.Каждый метод работы сети, который возвращает целочисленное значение
addNetwork()
иupdateNetwork()
-всегда возвращает -1.Каждая сетевая операция, которая возвращает логическое значение
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
иdisconnect()
- всегда возвращаетfalse
.
Если ваше приложение необходимо подключиться к сети Wi-Fi, используйте следующие альтернативные методы:
- Чтобы запустить мгновенное локальное подключение к сети Wi-Fi, используйте
WifiNetworkSpecifier
в стандартном объектеNetworkRequest
. - Чтобы добавить Wi-Fi Networks для рассмотрения для предоставления доступа к Интернету пользователю, работайте с объектами
WifiNetworkSuggestion
. Вы можете добавить и удалять сети, которые появляются в диалоговом окне выбора сети Auto-Connect, вызываяaddNetworkSuggestions()
иremoveNetworkSuggestions()
соответственно. Эти методы не требуют никаких разрешений на местоположение.
Некоторая телефония, Bluetooth, Wi-Fi API требует прекрасного разрешения на местоположение
Если ваше приложение предназначено для Android 10 или выше, оно должно иметь разрешение ACCESS_FINE_LOCATION
, чтобы использовать несколько методов в Wi-Fi, API-Fi, Wi-Fi или Bluetooth. В следующих разделах перечислены затронутые классы и методы.
Телефония
-
TelephonyManager
-
getCellLocation()
-
getAllCellInfo()
-
requestNetworkScan()
-
requestCellInfoUpdate()
-
getAvailableNetworks()
-
getServiceState()
-
-
TelephonyScanManager
-
requestNetworkScan()
-
-
TelephonyScanManager.NetworkScanCallback
-
onResults()
-
-
PhoneStateListener
-
onCellLocationChanged()
-
onCellInfoChanged()
-
onServiceStateChanged()
-
Wi-Fi
-
WifiManager
-
startScan()
-
getScanResults()
-
getConnectionInfo()
-
getConfiguredNetworks()
-
-
WifiAwareManager
-
WifiP2pManager
-
WifiRttManager
Bluetooth
-
BluetoothAdapter
-
startDiscovery()
-
startLeScan()
-
-
BluetoothAdapter.LeScanCallback
-
BluetoothLeScanner
-
startScan()
-
Разрешения
В этом разделе описываются обновления модели разрешений на Android.
Ограниченный доступ к содержимому экрана
Чтобы защитить содержимое экрана пользователей, Android 10 предотвращает тихий доступ к содержимому экрана устройства, изменяя область применения READ_FRAME_BUFFER
, CAPTURE_VIDEO_OUTPUT
и CAPTURE_SECURE_VIDEO_OUTPUT
. Начиная с Android 10, эти разрешения являются только подписью .
Приложения, которым необходимо получить доступ к содержимому экрана устройства, должны использовать API MediaProjection
, который отображает подсказку, просящую пользователя предоставить согласие.
Проверка разрешений на получение пользователя на устаревших приложениях
Если ваше приложение предназначено для Android 5.1 (уровень 22) или ниже, пользователи видят экран разрешений при использовании вашего приложения на устройстве, которое впервые запускает Android 10 или выше, как показано на рисунке 1. Этот экран дает пользователям возможность отозвать доступ к разрешениям, которые система, ранее предоставленная вашему приложению при установленном времени.
Распознавание физической активности
Android 10 представляет android.permission.ACTIVITY_RECOGNITION
разрешение на выполнение выполнения для приложений, которые необходимо обнаружить подсчет шагов пользователя или классифицировать физическую активность пользователя, такие как ходьба, велосипед или перемещение в транспортном средстве. Это предназначено для того, чтобы предоставить пользователям видимость того, как данные датчика устройства используются в настройках.
Некоторые библиотеки в Google Play Services, такие как API распознавания деятельности и API Google Fit , не предоставляют результаты, если пользователь не предоставит вашему приложению это разрешение.
Единственными встроенными датчиками на устройстве, которые требуют, чтобы вы объявляли это разрешение, являются счетчика и датчики детектора Step .
Если ваше приложение предназначено для Android 9 (уровень API 28) или ниже, система автоматически генерирует android.permission.ACTIVITY_RECOGNITION
разрешение на ваше приложение по мере необходимости, если ваше приложение удовлетворяет каждому из следующих условий:
- Манифестный файл включает в себя
com.google.android.gms.permission.ACTIVITY_RECOGNITION
разрешение. - Манифестный файл не включает в себя разрешение
android.permission.ACTIVITY_RECOGNITION
.
Если система системы предоставляет разрешение android.permission.ACTIVITY_RECOGNITION
, ваше приложение сохраняет разрешение после обновления вашего приложения для нацеливания на Android 10. Однако пользователь может отозвать это разрешение в любое время в настройках системы.
Группы разрешений удалены из пользовательского интерфейса
По состоянию на Android 10 приложения не могут посмотреть, как разрешения сгруппированы в пользовательском интерфейсе.
,Android 10 (уровень API 29) представляет ряд функций и изменений поведения, чтобы лучше защитить конфиденциальность пользователей. Эти изменения расширяют прозрачность и управление, которые пользователи имеют по сравнению с их данными, и возможностей, которые они предоставляют приложениям. Эти функции могут означать, что конкретное поведение или данные, от которых зависит ваше приложение, может вести себя по -разному по сравнению с более старыми версиями платформы. Воздействие на ваше приложение должно быть минимальным, если ваше приложение соблюдает текущие передовые методы для обработки пользовательских данных.
На этой странице перечислено краткое изложение каждого изменения.
Верхние изменения
Этот раздел включает в себя ключевые изменения в Android 10, связанные с конфиденциальностью.
Внешний доступ к хранилищам с файлами приложений и мультимедиа
По умолчанию приложения, нацеленные на Android 10 и выше, предоставляются общеобразованным доступом к внешнему хранилищу или хранилище . Такие приложения могут видеть следующие типы файлов в внешнем устройстве хранения без необходимости запросить любые разрешения, связанные с хранением,:
- Файлы в каталоге для конкретного приложения, доступ к которым можно было использовать
getExternalFilesDir()
. - Фотографии, видео и аудиоклипы, которые приложение создало в медиа -магазине .
Чтобы узнать больше о хранилище Scoped, а также о том, как обмениваться, получить доступ и изменить файлы, которые сохраняются на внешних устройствах хранения, см. Руководства по управлению файлами во внешнем хранилище и доступе и изменяйте медиа -файлы .
Доступ к местоположению устройства в фоновом режиме требует разрешения
Чтобы поддержать дополнительное управление, которое пользователи имеют доступ к доступу к приложению к информации о местоположении, Android 10 представляет разрешение ACCESS_BACKGROUND_LOCATION
.
В отличие от разрешений ACCESS_FINE_LOCATION
и ACCESS_COARSE_LOCATION
, разрешение ACCESS_BACKGROUND_LOCATION
влияет на доступ приложения к местоположению, когда оно работает в фоновом режиме. Считается, что приложение обращается к месту в фоновом режиме, если только одно из следующих условий не выполнено:
- Заявление, принадлежащее приложению, видна.
В приложении управляет сервис переднего плана, который объявил
location
обслуживания переднего плана .Чтобы объявить тип обслуживания переднего плана для службы в вашем приложении, установите
targetSdkVersion
вашего приложения илиcompileSdkVersion
до29
или выше. Узнайте больше о том, как службы переднего плана могут продолжать инициированные пользователем действия , которые требуют доступа к местоположению.
Если ваше приложение создает и отслеживает геозию и нацелена на Android 10 (API -уровень 29) или выше, вы должны объявить разрешение ACCESS_BACKGROUND_LOCATION
.
Доступ к предоставлению автоматически при нацеливании на Android 9 или ниже
Если ваше приложение работает на Android 10 или выше, но нацелен на Android 9 (API -уровень 28) или ниже, платформа применяет следующее поведение:
- Если ваше приложение объявляет элемент
<uses-permission>
дляACCESS_FINE_LOCATION
илиACCESS_COARSE_LOCATION
, система автоматически добавляет элемент<uses-permission>
дляACCESS_BACKGROUND_LOCATION
во время установки. - Если ваше приложение запрашивает либо
ACCESS_FINE_LOCATION
, либоACCESS_COARSE_LOCATION
, система автоматически добавляетACCESS_BACKGROUND_LOCATION
в запрос.
Доступ при обновлении устройства до Android 10
Если пользователь предоставляет ваше приложение доступ к местоположению устройства-либо ACCESS_COARSE_LOCATION
, либо ACCESS_FINE_LOCATION
-затем обновляет их устройство от Android 9 до Android 10, система автоматически обновляет набор разрешений на основе местоположения, предоставленных вашему приложению. Набор разрешений, которые получает ваше приложение после обновления, зависит от ее целевой версии SDK и его определенных разрешений, как показано в следующей таблице:
Таблица 1. Изменения в состоянии разрешения на местоположение после обновления устройства до Android 10
Целевая платформа версия | Грубо или хорошо разрешение предоставлено? | Фоновое разрешение определяется в манифесте? | Обновленное состояние разрешения по умолчанию |
---|---|---|---|
Android 10 | Да | Да | Доступ на передний план и фоновый |
Android 10 | Да | Нет | Только передний план |
Android 10 | Нет | (Игнорируется системой) | Нет доступа |
Android 9 или ниже | Да | Автоматически добавлено системой при времени обновления устройства | Доступ на передний план и фоновый |
Android 9 или ниже | Нет | (Игнорируется системой) | Нет доступа |
Обратите внимание, что пользователь может изменить этот уровень доступа даже после того, как система автоматически обновляет доступ вашего приложения к местоположению устройства. Например, пользователь может уменьшить доступ вашего приложения только на передний план или полностью отозвать доступ. Прежде чем попытаться получить доступ к местоположению устройства, особенно в рамках службы переднего плана, ваше приложение должно проверить, позволяет ли пользователь приложение получать информацию об этом месте.
Доступ отменен при обновлении уровня целевого API на устройствах Android 10
Рассмотрим случай, когда ваше приложение уже установлено на устройстве, которое запускает Android 10. Если вы обновляете свое приложение для нацеливания на Android 10 в этой ситуации, устройство отозван разрешение ACCESS_BACKGROUND_LOCATION
.
Для получения дополнительной информации о том, как получить местоположение устройства, пока ваше приложение находится в фоновом режиме, см. Руководство по получению периодических обновлений местоположения .
Ограничения на начальные действия с фона
Начиная с Android 10, система накладывает ограничения на начальные действия с фона . Такое изменение поведения помогает минимизировать прерывания для пользователя и обеспечивает более управляющего пользователем контроль над тем, что показано на их экране. Пока ваше приложение начинает действия в качестве прямого результата взаимодействия с пользователем, ваше приложение, скорее всего, не влияет на эти ограничения.
Чтобы узнать больше о рекомендуемой альтернативе начальной деятельности с фона, см. Руководство о том, как предупредить пользователей о чувствительных ко времени событиях в вашем приложении.
Идентификаторы и данные
В этом разделе перечислены изменения, специфичные для работы с идентификаторами устройства и данными.
Удаление сродства контактов
Начиная с Android 10, платформа не отслеживает информацию о сродстве контактов. В результате, если ваше приложение проводит поиск на контактах пользователя, результаты не упорядочены частотой взаимодействия.
Руководство по ContactsProvider
содержит уведомление, описывающее конкретные поля и методы, которые устарели на всех устройствах, начиная с Android 10.
Рандомизация MAC-адреса
На устройствах, которые запускаются Android 10 или выше, система по умолчанию передает рандомизированные MAC -адреса.
Если ваше приложение обрабатывает вариант использования предприятия , платформа предоставляет API для нескольких операций, связанных с MAC -адресами:
- Получить рандомизированный MAC -адрес: приложения владельца устройства и приложения владельца профиля могут извлечь рандомизированный MAC -адрес, назначенный конкретной сети, вызывая
getRandomizedMacAddress()
. - Получите фактический, заводской MAC -адрес: приложения владельца устройства могут получить фактический аппаратный MAC -адрес устройства, вызывая
getWifiMacAddress()
. Этот метод полезен для отслеживания парков устройств.
Ограничение на доступ к /proc /net файловая система
На устройствах, которые запускаются Android 10 или выше, приложения не могут получить доступ /proc/net
, которая включает информацию о состоянии сети устройства. Приложения, которые нуждаются в доступе к этой информации, такой как VPNS, должны использовать класс NetworkStatsManager
или ConnectivityManager
.
Ограничение на идентификаторы устройств, не разрешающих,
Начиная с Android 10, приложения должны иметь привилегированное разрешение READ_PRIVILEGED_PHONE_STATE
, чтобы получить доступ к неретируемым идентификаторам устройства, которые включают как IMEI, так и серийный номер.
Пострадавшие методы включают следующее:
-
Build
-
TelephonyManager
Если в вашем приложении нет разрешения, и вы все равно пытаетесь запрашивать информацию о неретируемых идентификаторах, ответ платформы варьируется в зависимости от целевой версии SDK:
- Если ваше приложение предназначено для Android 10 или выше, происходит
SecurityException
. - Если ваше приложение предназначено для Android 9 (API -уровень 28) или ниже, метод возвращает данные
null
или заполнителе, если в приложении есть разрешениеREAD_PHONE_STATE
. В противном случае происходитSecurityException
.
Многие варианты использования не нуждаются в неретентных идентификаторах устройств. Например, если в вашем приложении используются идентификаторы устройств, не разрешаемые для целей AD-отслеживания или пользовательской аналитики, вместо этого используйте идентификатор рекламы Android для этих конкретных вариантов использования. Чтобы узнать больше, увидеть лучшие практики для уникальных идентификаторов .
Ограниченный доступ к данным буфера обмена
Если ваше приложение не является редактором метода ввода по умолчанию (IME) или является приложением, которое в настоящее время имеет фокус, ваше приложение не может получить доступ к данным буфера об буферизации на Android 10 или выше.
Защита серийного номера USB -устройства
Если ваше приложение предназначено для Android 10 или выше, ваше приложение не может прочитать серийный номер, пока пользователь не предоставит вашему приложению разрешение на доступ к устройству USB или аксессуару.
Чтобы узнать больше о работе с USB -устройствами, см. Руководство по настройке USB -хостов .
Камера и подключение
В этом разделе перечислены изменения, специфичные для метаданных камеры и API -файлов подключения.
Ограничение на доступ к деталям камеры и метаданным
Android 10 изменяет широту информации, которую метод getCameraCharacteristics()
возвращает по умолчанию. В частности, ваше приложение должно иметь разрешение CAMERA
, чтобы получить доступ к потенциально специфичным для устройства метаданные, которые включены в возвращаемое значение этого метода.
Чтобы узнать больше об этих изменениях, см. Раздел о полях камеры, которые требуют разрешения .
Ограничение на включение и отключение Wi-Fi
Приложения, нацеленные на Android 10 или выше, не могут включить или отключить Wi-Fi. Метод WifiManager.setWifiEnabled()
всегда возвращает false
.
Если вам нужно предложить пользователям включить и отключить Wi-Fi, используйте панель настроек .
Ограничения на прямой доступ к настроенным сетям Wi-Fi
Чтобы защитить конфиденциальность пользователей, ручная конфигурация списка сетей Wi-Fi ограничена системными приложениями и контроллерами политики устройств (DPCS) . Данный DPC может быть либо владельцем устройства, либо владельцем профиля.
Если ваше приложение предназначено для Android 10 или выше, и это не системное приложение или DPC, то следующие методы не возвращают полезные данные:
Метод
getConfiguredNetworks()
всегда возвращает пустой список.Каждый метод работы сети, который возвращает целочисленное значение
addNetwork()
иupdateNetwork()
-всегда возвращает -1.Каждая сетевая операция, которая возвращает логическое значение
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
иdisconnect()
- всегда возвращаетfalse
.
Если ваше приложение необходимо подключиться к сети Wi-Fi, используйте следующие альтернативные методы:
- Чтобы запустить мгновенное локальное подключение к сети Wi-Fi, используйте
WifiNetworkSpecifier
в стандартном объектеNetworkRequest
. - Чтобы добавить Wi-Fi Networks для рассмотрения для предоставления доступа к Интернету пользователю, работайте с объектами
WifiNetworkSuggestion
. Вы можете добавить и удалять сети, которые появляются в диалоговом окне выбора сети Auto-Connect, вызываяaddNetworkSuggestions()
иremoveNetworkSuggestions()
соответственно. Эти методы не требуют никаких разрешений на местоположение.
Некоторая телефония, Bluetooth, Wi-Fi API требует прекрасного разрешения на местоположение
Если ваше приложение предназначено для Android 10 или выше, оно должно иметь разрешение ACCESS_FINE_LOCATION
, чтобы использовать несколько методов в Wi-Fi, API-Fi, Wi-Fi или Bluetooth. В следующих разделах перечислены затронутые классы и методы.
Телефония
-
TelephonyManager
-
getCellLocation()
-
getAllCellInfo()
-
requestNetworkScan()
-
requestCellInfoUpdate()
-
getAvailableNetworks()
-
getServiceState()
-
-
TelephonyScanManager
-
requestNetworkScan()
-
-
TelephonyScanManager.NetworkScanCallback
-
onResults()
-
-
PhoneStateListener
-
onCellLocationChanged()
-
onCellInfoChanged()
-
onServiceStateChanged()
-
Wi-Fi
-
WifiManager
-
startScan()
-
getScanResults()
-
getConnectionInfo()
-
getConfiguredNetworks()
-
-
WifiAwareManager
-
WifiP2pManager
-
WifiRttManager
Bluetooth
-
BluetoothAdapter
-
startDiscovery()
-
startLeScan()
-
-
BluetoothAdapter.LeScanCallback
-
BluetoothLeScanner
-
startScan()
-
Разрешения
В этом разделе описываются обновления модели разрешений на Android.
Ограниченный доступ к содержимому экрана
Чтобы защитить содержимое экрана пользователей, Android 10 предотвращает тихий доступ к содержимому экрана устройства, изменяя область применения READ_FRAME_BUFFER
, CAPTURE_VIDEO_OUTPUT
и CAPTURE_SECURE_VIDEO_OUTPUT
. Начиная с Android 10, эти разрешения являются только подписью .
Приложения, которым необходимо получить доступ к содержимому экрана устройства, должны использовать API MediaProjection
, который отображает подсказку, просящую пользователя предоставить согласие.
Проверка разрешений на получение пользователя на устаревших приложениях
Если ваше приложение предназначено для Android 5.1 (уровень 22) или ниже, пользователи видят экран разрешений при использовании вашего приложения на устройстве, которое впервые запускает Android 10 или выше, как показано на рисунке 1. Этот экран дает пользователям возможность отозвать доступ к разрешениям, которые система, ранее предоставленная вашему приложению при установленном времени.
Распознавание физической активности
Android 10 представляет android.permission.ACTIVITY_RECOGNITION
разрешение на выполнение выполнения для приложений, которые необходимо обнаружить подсчет шагов пользователя или классифицировать физическую активность пользователя, такие как ходьба, велосипед или перемещение в транспортном средстве. Это предназначено для того, чтобы предоставить пользователям видимость того, как данные датчика устройства используются в настройках.
Некоторые библиотеки в Google Play Services, такие как API распознавания деятельности и API Google Fit , не предоставляют результаты, если пользователь не предоставит вашему приложению это разрешение.
Единственными встроенными датчиками на устройстве, которые требуют, чтобы вы объявляли это разрешение, являются счетчика и датчики детектора Step .
Если ваше приложение предназначено для Android 9 (уровень API 28) или ниже, система автоматически генерирует android.permission.ACTIVITY_RECOGNITION
разрешение на ваше приложение по мере необходимости, если ваше приложение удовлетворяет каждому из следующих условий:
- Манифестный файл включает в себя
com.google.android.gms.permission.ACTIVITY_RECOGNITION
разрешение. - Манифестный файл не включает в себя разрешение
android.permission.ACTIVITY_RECOGNITION
.
Если система системы предоставляет разрешение android.permission.ACTIVITY_RECOGNITION
, ваше приложение сохраняет разрешение после обновления вашего приложения для нацеливания на Android 10. Однако пользователь может отозвать это разрешение в любое время в настройках системы.
Группы разрешений удалены из пользовательского интерфейса
По состоянию на Android 10 приложения не могут посмотреть, как разрешения сгруппированы в пользовательском интерфейсе.