Android 33 не может получить доступ к определенной сети Wi-Fi

У меня есть устройство Интернета вещей, которое при запуске устанавливает локальную точку доступа, которая может принимать HTTP-запрос на предоставление сведений о соединении для точки доступа, подключенной к Интернету.

Я пишу приложение для Android, которое подключается к локальной точке доступа, а затем отправляет HTTP-запрос.

Если я вручную устанавливаю соединение с локальной точкой доступа, а затем запускаю код для отправки HTTP-запроса, все работает нормально. Если я создаю соединение с локальной точкой доступа из приложения, это удается (я вижу это на устройстве IOT), но когда я пытаюсь отправить HTTP-запрос, я получаю ошибку ENONET.

Вот код для подключения к локальной точке доступа:

      private boolean connectToSSID (String SSID, String passphrase) {

    WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder();
    builder.setSsid(SSID);
    builder.setWpa2Passphrase(passphrase);
    WifiNetworkSpecifier wifiNetworkSpecifier = builder.build();

    NetworkRequest.Builder networkRequestBuilder1 = new NetworkRequest.Builder();
    networkRequestBuilder1.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
    networkRequestBuilder1.setNetworkSpecifier(wifiNetworkSpecifier);
    NetworkRequest nr = networkRequestBuilder1.build();

    ConnectivityManager cm = (ConnectivityManager)
            context.getSystemService(Context.CONNECTIVITY_SERVICE);

    ConnectivityManager.NetworkCallback networkCallback = new
            ConnectivityManager.NetworkCallback() {
                @Override
                public void onAvailable(Network network) {
                    super.onAvailable(network);
                    cm.bindProcessToNetwork(network);
                    connected = true;
                }
            };
        cm.requestNetwork(nr, networkCallback);

        for (int i = 0; i < 60; i++) {
            SystemClock.sleep(1000);
            if (connected)
                break;
        }
        cm.unregisterNetworkCallback(networkCallback);
        return connected;
}

При успешном подключении я отправляю HTTP-запрос, используя этот код:

      try {
        URL url = new URL(str);
        urlConnection = (HttpURLConnection) url.openConnection();
        InputStream in = new BufferedInputStream(urlConnection.getInputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
            String line;
            while ((line = br.readLine()) != null) {
                Log.d (TAG, line);
            }
        Log.d (TAG, "Done");
    } catch (MalformedURLException e) {
        throw new RuntimeException(e);
    } catch (IOException e) {
        Log.d (TAG, "IO exception");
        Log.d (TAG, e.getLocalizedMessage());
    } finally {
        if (urlConnection != null)
            urlConnection.disconnect();
    }

Я задавался вопросом, может ли это быть проблемой с возможностями, например, NET_CAPABILITY_INTERNET может быть проблемой, поэтому я проверил возможности, которые построитель сетевых запросов добавляет автоматически, и обнаружил 13, 14 и 15 (NET_CAPABILITY_NOT_RESTRICTED, NET_CAPABILITY_NOT_VPN и NET_CAPABILITY_TRUSTED). Ничто из этого не должно быть проблемой.

Нужно ли мне что-то делать, чтобы проверить готовность сети перед ее использованием? Если да, то как? Если нет, я ищу предложения по поводу того, что может привести к ошибке ENONET.

0 ответов

Другие вопросы по тегам