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?

Здесь также есть связанный вопрос, но я не знаком с файловым дескриптором и имею только базовые знания Си. Если возможно, я бы предпочел решение, которое работает без собственного кода. Тем не менее, я не знал, как будет работать нативное решение, и был бы рад любым предложениям!

0 ответов

Другие вопросы по тегам