Контрольный список Android 11 для разработчиков

Android 11 в настоящее время находится в стадии бета-тестирования, а публичный выпуск запланирован на третий квартал 2020 года.

От встроенного устройства записи экрана с возможностью включения аудиозаписи устройства до запланированных темных режимов и просмотра уведомлений о сообщениях в виде пузырей - в этом году в Android R будет выпущено множество захватывающих новых изменений.

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

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

В разрешениях теперь есть опция "Только на этот раз"

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

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

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

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

Система теперь автоматически отменяет разрешение для неиспользуемых приложений и скрывает диалоговое окно при повторном отказе

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

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

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

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

Кроме того, вызовите метод isAutoRevokeWhitelisted(), чтобы определить статус разрешений вашего приложения.

Еще одно важное изменение в потоке разрешений во время выполнения в Android 11 - это неявное выражение «больше не спрашивать». Вплоть до Android 10 разработчик мог продолжать запрашивать разрешение каждый раз, когда пользователь нажимал «Запретить». Теперь, если пользователь несколько раз подряд нажимает «Запретить» для получения определенного разрешения, действие подразумевает «больше не спрашивать».

Отдельное разрешение на размещение в фоновом режиме

Третье большое изменение в Android 11 - это обработка разрешений на определение местоположения в фоновом режиме.

Мы знаем, что Android 10 требовал определения нового разрешения ACCESS_BACKGROUND_LOCATION в манифесте для запроса фоновых местоположений.

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

Для фонового запроса местоположения вам нужно будет вызвать метод requestPermission отдельно с ACCESS_BACKGROUND_LOCATION. Это приведет пользователя на страницу настроек приложения, где он сможет разрешить это. На странице настроек теперь отображается новый параметр «Разрешить все время» для полного доступа к местоположению, если пользователь решит предоставить его.

Важно отметить, что одновременный вызов запросов местоположения переднего и заднего плана или вызов ACCESS_BACKGROUND_LOCATION перед запросом переднего плана будут игнорироваться системой.

Ограничения видимости пакетов

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

Для этого вам нужно указать <package> имена этих приложений внутри нового элемента <queries> в вашем файле манифеста. Но вы также можете указать <intent> категорию, чтобы разрешить доступ к набору приложений.

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

Вызов queryIntentActivities() в Android 11 вернет только те приложения, которые определены в queries.

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

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

Улучшенная реализация хранилища с ограниченным объемом

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

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

Но на момент запуска ограниченное хранилище требовало от вас использования Storage Access Framework для доступа к файлам за пределами каталога вашего приложения. По сути, java.io.File API больше не работал. Это вызвало негативную реакцию сообщества разработчиков. Такие вещи, как пакетное удаление файлов, стали обременительными - пользователям приходилось вручную подтверждать доступ к каждому файлу (файлам) в своей системе.

Но, к счастью, в Android 10 реализация ограниченного хранилища стала необязательной. Вы можете указать android:requestLegacyExternalStorage=true в манифесте, чтобы отказаться от него.

Но начиная с Android 11 использование хранилища с ограниченным объемом теперь является обязательным.

Поэтому Android сделал его более удобным, вернув java.io.File API, чтобы обеспечить легкий доступ к прямым путям к файлам.

Кроме того, в Android 11 добавлены новые API-интерфейсы хранилища мультимедиа для пакетной обработки: createWriteRequest(), createTrashRequest(), createFavoriteRequest(). Чтобы узнать больше об этом, обратитесь к Обновлениям хранилища в Android 11.

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

Приложения, которым требуется полный доступ для заполнения (например, сторонние установщики), должны указать новое разрешение MANAGE_EXTERNAL_STORAGE в файле AndroidManifest.xml.

Уведомления о новых разговорах

Уведомления сегодня являются неотъемлемой частью любого приложения. В Android 11 теперь есть специальный раздел для уведомлений о сообщениях чата.

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

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

Уведомление о разговоре также предоставляет быстрые функции, такие как откладывание сигнала, автоматические ответы и определение приоритета определенного чата.

До свидания тосты на главном экране и изменения API

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

Android 11 полностью заблокировал возможность отображения пользовательских тостов при отправке в фоновом режиме.

Кроме того, текстовые всплывающие сообщения больше не поддерживают setView. Выполнение getView() для них вернет null.

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

Одним из важных дополнений к API тостов в Android 11 является новый метод addCallback() для прослушивания появления и исчезновения тостов.

Заключение

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

Надеюсь, у вас будет плавный переход на Android 11.

Вот и все. Спасибо за прочтение.