Как найти статус 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")
Ответ 2
Вы использовали - VpnService
Согласно документации -
Prepare to establish a VPN connection. This method returns 'null' if the VPN application
is 'already prepared'.
Отсюда -
http://developer.android.com/reference/android/net/VpnService.html#prepare(android.content.Context)
Intent intent = VpnService.prepare(getApplicationContext());
if (intent == null) {
// this means there is already a prepared VPN connection
}
Ответ 3
Я знаю, что ответ смехотворно опаздывает, но я просто пытался понять это и наткнулся на команду:
ifconfig tun0
Это вернет IP address
и другую информацию, если VPN подключен, и если это не так.
tun0: Нет такого устройства