Интернет-разрешение не работает в oreo и pie - PullRequest
2 голосов
/ 09 марта 2019

Я новичок здесь.Я создал простое приложение, которое отправляет некоторые данные на сервер и также получает ответ.

Приложение работает нормально на устройствах до Android N. Но не работает на O и P. Похоже, проблема винтернет-разрешение.Я проверил, и приложение не отправляет никаких данных на сервер, пока он работает на o и p.Пожалуйста, дайте мне знать, если мне нужно получить какое-либо конкретное разрешение для доступа в Интернет.

Я добавил это в манифесте

<uses-permission android:name="android.permission.INTERNET" />

Любая помощь будет оценена.

Ответы [ 2 ]

7 голосов
/ 09 марта 2019

Если ваш URL начинается с http, то вы должны использовать его в Android Pie, то есть уровень API 28

android:usesCleartextTraffic="true"

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

7 голосов
/ 09 марта 2019

Это, вероятно, потому что вы используете http.Начиная с Android O, вам нужно использовать https вместо http, иначе у вас будет ошибка Cleartext HTTP traffic to * not permitted.Итак, вам нужно создать конфигурацию, чтобы разрешить это.Вы можете сослаться на него Отказаться от трафика открытого текста

Подробности документации:

Примечание. Указания в этом разделе относятся только к приложениям, которыецелевой Android 8.1 (уровень API 27) или ниже.Начиная с Android 9 (уровень API 28), поддержка открытого текста по умолчанию отключена.

Приложения, намеревающиеся подключаться к адресатам с использованием только безопасных подключений, могут отказаться от поддержки открытого текста (вместо этого используется незашифрованный протокол HTTP).HTTPS) к этим направлениям.Этот параметр помогает предотвратить случайные регрессии в приложениях из-за изменений в URL-адресах, предоставляемых внешними источниками, такими как внутренние серверы.Подробнее см. NetworkSecurityPolicy.isCleartextTrafficPermitted().

Например, приложение может захотеть убедиться, что все соединения с secure.example.com всегда выполняются по HTTPS для защиты конфиденциального трафика от враждебных сетей.

res/xml/network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
        <domain includeSubdomains="true">secure.example.com</domain>
    </domain-config>
</network-security-config>

.


Вы также можете использовать android:usesCleartextTraffic="true" в вашем AndroidManifest.xml для режима разработки, но вы не должны использовать его в режиме выпуска,Подробнее об этом читайте в Блоге разработчиков Android , здесь приведены выдержки:

Блокировка трафика открытого текста в рабочей среде

Для защиты установленной базы вашего приложения от регрессии ктрафик в открытом тексте, объявите android: использовании атрибутаCleartextTraffic = «false» в элементе приложения в AndroidManifest.xml вашего приложения.Это объявляет, что приложение не должно использовать сетевой трафик открытым текстом, и сетевые стеки платформы Android Marshmallow блокируют трафик открытого текста в приложении.Например, если ваше приложение случайно пытается войти в систему через HTTP-запрос открытым текстом, запрос будет заблокирован, а имя пользователя и пароль не попадут в сеть.

Вам не нужно устанавливатьminSdkVersion или targetSdkVersion вашего приложения до 23 (Android Marshmallow) для использования Android: использует ClearTextTraffic.На старых платформах этот атрибут просто игнорируется и, следовательно, не имеет никакого эффекта.

Обратите внимание, что WebView еще не поддерживает эту функцию.

И при определенных обстоятельствах трафик открытого текста может по-прежнему выходить или входить вприложение.Например, Socket API игнорирует политику открытого текста, потому что он не знает, могут ли данные, которые он передает или получает, могут быть классифицированы как открытый текст.С другой стороны, HTTP-стеки на платформе Android соблюдают эту политику, поскольку они знают, является ли трафик открытым текстом.

Google AdMob также создан для соблюдения этой политики.Когда ваше приложение заявляет, что оно не использует трафик в виде открытого текста, в приложение должны подаваться только объявления только с HTTPS.

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

...