Android: ProcessBuilder не привязан к сети (установлен ConnectivityManager.bindProcessToNetwork)
Я работаю над проектом, который должен оценить соединения Wi-Fi.
Поскольку смартфон может иметь подключение для передачи данных, я проверяю каждое подключение, к которому привязана сеть TYPE_WIFI
:
boolean bound = false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
bound = cm.bindProcessToNetwork(wifiNetwork); // M and above
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
bound = cm.setProcessDefaultNetwork(wifiNetwork)
}
.....
Пока работает нормально, при использовании HttpURLConnection
, okhttp
и WebView
,
Однако мне также нужно протестировать запросы ICMP и, следовательно, использовать систему ping
как это:
Process process = new ProcessBuilder()
.command("/system/bin/ping", "-c 3", url)
.redirectErrorStream(true)
.start();
К сожалению, этот новый процесс не связан с сетью. (Хотя я бы предположил и надеялся, что это так.)
Можно было бы создать сокет, который связан с требуемой сетью, но как бы я использовал этот сокет для вызова ping
?
Здесь также есть связанный вопрос, но я не знаком с файловым дескриптором и имею только базовые знания Си. Если возможно, я бы предпочел решение, которое работает без собственного кода. Тем не менее, я не знал, как будет работать нативное решение, и был бы рад любым предложениям!