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.