Http GET 不适用于 Android 11+ |颤振

问题描述 投票:0回答:0

我的应用程序需要连接到接入点,连接后进行 http GET 以了解设备的版本。

与 AP 的连接工作良好。

什么时候进行 http 调用,我总是在构建 Android 11 或更高版本的手机上得到

check WS error: SocketException: Connection failed (OS Error: Network is unreachable, errno = 101), address = 192.168.4.1, port = 80

那是我的代码(如果连接失败,我必须重试 MAX_ATTEMPT 次):

  Future<bool> checkWS() async {
    try {
      print("checkWS attempt #$attempt");

      final uri = Uri.http("192.168.4.1", "xxxxxxxx.xxx");
      print("GET $uri");

      final response = await http.get(uri).timeout(const Duration(seconds: 5));

      if (response.statusCode > 400) return false;

      return !response.body.contains("913.3.");
    } catch (e) {
      print("check WS error: $e");
      if (attempt < MAX_ATTEMPT) {
        return await Future.delayed(const Duration(seconds: 1), () {
          attempt++;
          return checkWS();
        });
      } else {
        throw TimeoutException(null);
      }
    }
  }

这是我的

AndroidManifefest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="dsafadgadfgdwgfsd">

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

    <application
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher"
        android:label="xxxxxxx"
        android:usesCleartextTraffic="true"
        android:networkSecurityConfig="@xml/network_security_config">


        <!-- for http support-->
        <uses-library android:name="org.apache.http.legacy" android:required="false"/>

        <activity
            android:name=".MainActivity"
.....

network_security_config

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">192.168.4.1</domain>
    </domain-config>
</network-security-config>

如何让它在 A11+ 上运行?

android flutter androidhttpclient
© www.soinside.com 2019 - 2024. All rights reserved.