Работая над приложением Android, в котором мне нужно программно подключить устройство WiFi, которое не имеет Интернета. Вот код: < /p>
private void connectToWiFi(final String ssid, String password) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
final ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder request = new NetworkRequest.Builder();
request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
request.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); // Internet not required
ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
String networkSSID = getNetworkSsid();
if (networkSSID.equals(ssid)) {
connectivityManager.bindProcessToNetwork(network);
}
}
@Override
public void onUnavailable() {
super.onUnavailable();
}
@Override
public void onLost(@NonNull Network network) {
super.onLost(network);
}
};
connectivityManager.registerNetworkCallback(request.build(), networkCallback);
WifiConfiguration config = new WifiConfiguration();
config.SSID = String.format("\"%s\"", ssid);
int netId = -1;
List apList = wifiManager.getConfiguredNetworks();
for (WifiConfiguration i : apList) {
if (i.SSID != null && i.SSID.equals("\"" + ssid + "\"")) {
netId = i.networkId;
}
}
// Add network in Saves network list if it is not available in list
if (netId == -1) {
if (TextUtils.isEmpty(password)) {
Log.d(TAG, "====== Connect to open network");
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
} else {
Log.d(TAG, "====== Connect to secure network");
config.preSharedKey = String.format("\"%s\"", password);
}
netId = wifiManager.addNetwork(config);
}
Log.d(TAG, "Connect to Network : " + netId);
wifiManager.enableNetwork(netId, true);
} else {
// For Android 10 and above
// WifiNetworkSpecifier code
}
}
< /code>
Используются разрешения: < /p>
< /code>
Вышевой код хорошо работает для сетей, которые предлагают подключение к Интернету.
, но в большинстве случаев он не работает в большинстве случаев без подключения к Интернету. Система отключится от этой сети Wi -Fi. Это не позволяет оставаться на связи с Wi -Fi, у которого нет интернета.
Это действительно удивительно, Android никогда не думал о случаях использования устройств IoT, прежде чем ограничивать сетевое соединение.UID xxxxx does not have permission to update configuration< /code> < /p>
Такая же ошибка не происходит, когда приложение пытается подключить устройство, которое имеет интернет, даже если эта сеть добавляется каким -либо другим приложением. Но через несколько секунд сеть отключена, и система пытается повторно акцентировать с некоторыми другими сетью с поддержкой в Интернете. И в основном эта ошибка представлена из Android 7 или что -то в этом роде, потому что она работала ранее. < /P>
Я также сообщил о проблеме здесь. Также предоставлено пример примера в этом выпуске.
есть ли возможность платной поддержки от Android? < /p>
Заранее. < /p>
Подробнее здесь: https://stackoverflow.com/questions/623 ... android-10