фильтр трафика или фаервол типа adguard, из-за которого приложение не может достучаться до тырнета? Или только на все случаи жизни показывать сообщение, чтоб в случае наличия пользователь разрешил доступ и тп
public boolean isOnline() { Runtime runtime = Runtime.getRuntime(); ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager != null) { Network activeNetwork = connectivityManager.getActiveNetwork(); if (activeNetwork != null) { NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork); if (!(networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET))) { return false; } } else { return false; } } else { return false; } try { Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); int exitValue; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { ipProcess.waitFor(2, TimeUnit.SECONDS); exitValue = ipProcess.exitValue(); } else { exitValue = ipProcess.waitFor(); } return exitValue == 0; } catch (IOException | InterruptedException | IllegalThreadStateException e) { return false; } }
Ну то есть хардкордно пингануть любой публичный днс, я так и думал.
Больше лучше для себя не нашел
1. А зачем публичный, запрашивай только свои да файрбезов, аппметрик всяких 2. ICMP в локалке и на другой стороне может быть запрещён
Обсуждают сегодня