Как найти статус VPN-соединения с помощью интерфейсных API или любого другого эффективного метода?

Пока:

Я нашел следующие решения

Мой вывод:

Пока все найденные решения либо неэффективны, либо не настолько надежны.

Мои вопросы:

Если VPN подключен к устройству Android, то ОС Android должен знать об этом.

Есть ли какие-либо общедоступные API-интерфейсы для Android, чтобы их прочитать, поскольку локальное обнаружение является наиболее эффективным и надежным решением?

Есть ли другие эффективные и надежные способы его достижения (например, интеграция библиотеки C или C плюс с NDK)?

Примечание:

Я не мог найти никаких настраиваемых широковещательных отправителей /AIDL из OpenVPN для Android, а также

Ответ 1

Вы можете попробовать проверить tun0 INTERFACE, он запускается в команде set.

try {
    for( NetworkInterface intf : Collections.list(NetworkInterface.getNetworkInterfaces())) {

        // Pass over dormant interfaces
        if(!intf.isUp() || intf.getInterfaceAddresses().size() == 0)
            continue;

            if ("tun0".equals(intf.getName())){
                // The VPN is up
                break;
            }
    }
}

это также может работать:

(Collections.list(NetworkInterface.getByName("tun0")

Ответ 3

Я знаю, что ответ смехотворно опаздывает, но я просто пытался понять это и наткнулся на команду:

ifconfig tun0

Это вернет IP address и другую информацию, если VPN подключен, и если это не так.

tun0: Нет такого устройства