У меня есть SSID, у которого нет доступа в Интернет, и я пытаюсь подключить его программно из приложения для Android. Я должен сделать несколько вызовов api с этим SSID, хотя у него нет Интернета. Все работает нормально под версиями android Q. Есть некоторая проблема с версией Android Q.
Я использую Retrofit для связи по протоколу https.
Я использую WifiNetworkSpecifier и диспетчер Wi-Fi для программного подключения к SSID (без Интернета).
WifiNetworkSpecifier specifier = new WifiNetworkSpecifier.Builder()
.setSsid(ssid)
.setWpa2Passphrase(password)
.build();
NetworkRequest networkRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED)
.setNetworkSpecifier(specifier)
.build();
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback()
@Override
public void onAvailable(Network network) {
}
@Override
public void onUnavailable() {
super.onUnavailable();
}
@Override
public void onLost(Network network) {
}
};
connectivityManager.requestNetwork(networkRequest, networkCallback, 30000
);
Я могу успешно подключиться к сети Wi-Fi из моего кода. Но каждый раз, когда я выполняю вызовы API SSID, я получаю сообщение «Не удается разрешить URL-адрес хоста. Нет адреса, связанного с именем хоста» в обратном вызове retrofit onFailure (). Но что интересно, если я подключаю SSID из приложения настроек телефона, я не вижу исключения неизвестного хоста, и все работает нормально.
Может ли кто-нибудь мне помочь, в android Q чем такого отличается подключение SSID программно, чем через настройки android? Что еще мне нужно изменить, чтобы решить эту проблему?