Как узнать Wi-Fi или сотовую связь с помощью Java на Windows 10 - PullRequest
0 голосов
/ 18 марта 2019

Я работаю над приложением Java, работающим на Windows 10 проф.на планшетах Microsoft Surface Pro с SIM-картой.Это приложение предоставляет несколько механизмов обновления для обновления коллекции приложений EFB (Electronic Fligt Bag), создания отчетов, отправки их на удаленный сервер Alfresco и предоставления жизненного цикла Doc пользователям и компании.Есть небольшие и большие обновления, то есть одно обновление занимает около 300 МБ, а другое - 1,8 ГБ каждое.Теперь мы также собираемся внедрять обновления для сотовой связи в тех случаях, когда доступ к Wi-Fi отсутствует.Теперь я потратил много времени на то, как отличить Wi-Fi и сотовую связь с точки зрения Java.Я нашел .net - API, чтобы сделать именно это, но мне не удалось найти соответствующий метод Java.Конечно, я могу собрать .net-бинарный файл и вызвать его из Java, чтобы сохранить файл с ответом, но это кажется уродливым.Кто-нибудь имеет опыт использования Java только для того, чтобы различать сотовую связь и Wi-Fi в Windows 10?Любая подсказка приветствуется.

1 Ответ

1 голос
/ 20 марта 2019

Этот код использует java.net.InterfaceAddress для проверки работоспособности интерфейсов.С этого момента тип соединения легко определяется с помощью метода .getDisplayName ().Я изменил код с https://examples.javacodegeeks.com/core-java/net/networkinterface/java-net-networkinterface-example/

import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Collections;
import org.apache.commons.lang.StringUtils;

public class networkConnectionTeller {

    public static boolean isNetworkRunningViaCellular() throws SocketException {
        String s = "";
        // NetworkInterface implements a static method that returns all the 
       //interfaces on the PC,
       // which we add on a list in order to iterate over them.
        ArrayList interfaces = 
        Collections.list(NetworkInterface.getNetworkInterfaces());

        s += ("Printing information about the available interfaces...\n");
        for (Object ifaceO : interfaces) {
            NetworkInterface iface = (NetworkInterface) ifaceO;
            // Due to the amount of the interfaces, we will only print info
            // about the interfaces that are actually online.
            if (iface.isUp() && 
           !StringUtils.containsIgnoreCase(iface.getDisplayName(), "loopback")) {  
            //Don`t want to see software loopback interfaces

                // Display name
                s += ("Interface name: " + iface.getDisplayName() + "\n");

                // Interface addresses of the network interface
                s += ("\tInterface addresses: ");
                for (InterfaceAddress addr : iface.getInterfaceAddresses()) {
                    s += ("\t\t" + addr.getAddress().toString() + "\n");
                }

                // MTU (Maximum Transmission Unit)
                s += ("\tMTU: " + iface.getMTU() + "\n");

                // Subinterfaces
                s += ("\tSubinterfaces: " + 
                Collections.list(iface.getSubInterfaces()) + "\n");

                // Check other information regarding the interface
                s += ("\tis loopback: " + iface.isLoopback() + "\n");
                s += ("\tis virtual: " + iface.isVirtual() + "\n");
                s += ("\tis point to point: " + iface.isPointToPoint() + "\n");
                System.out.println(s);

                if (iface.getDisplayName().contains("Broadband")) {
                    return true;
                }
            }
        }
        return false;
    }
}
...