Intereting Posts
Я использую SQLCIPHER для чтения или записи базы данных Как очистить стек истории событий при нажатии кнопки «домой»? Ограничение прокрутки на офлайн-картах, на Android Как бороться с отсутствующей исходной папкой src / test / java в проекте Android / Maven? Проблема видимости Android с флажком Push-уведомление с открытием Parse перед нажатием на уведомление GSON: Ожидалась строка, но BEGIN_OBJECT? Как использовать интеграцию Google Plus в Android Studio Что происходит, когда заканчиваются все действия приложения? Динамически добавить фрагмент с помощью LayoutParams Как захватить эскиз изображения И сохранить файл в пользовательской папке на Android Можно создать эту простую форму в Android XML? Android: Как получить или получить определенное изображение из любого URl или LINK, как в facebook? Получить значение поля «Изменить текст» Как получить все изображения и фотографии с моего устройства Android от sdcard?

Проверьте, активно ли VPN-соединение в Android?

У меня есть стороннее приложение VPN на моем устройстве без привязки к Android 4.4, и вы хотите написать фоновый сервис для мониторинга VPN-подключения и предупредить пользователя, если соединение VPN было нарушено.

Есть ли способ сделать это? Я не мог найти никакого способа использования API VPNService.

Спасибо д

Это работает для меня: протестировано с API от 16 до 23:

List<String> networkList = new ArrayList<>(); try { for (NetworkInterface networkInterface : Collections.list(NetworkInterface.getNetworkInterfaces())) { if (networkInterface.isUp()) networkList.add(networkInterface.getName()); } } catch (Exception ex) { Timber.d("isVpnUsing Network List didn't received"); } return networkList.contains("tun0"); 

PS Также это может быть другая networkInterface с именем «ppp0», но в моих тестах с различными приложениями VPN это всегда было «tun0»,

Использование NetworkCapabilities работало для меня. Вы должны зациклиться на всех существующих сетях и проверить, у которого есть VPN_TRANSPORT

 ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); Network[] networks = cm.getAllNetworks(); Log.i(TAG, "Network count: " + networks.length); for(int i = 0; i < networks.length; i++) { NetworkCapabilities caps = cm.getNetworkCapabilities(networks[i]); Log.i(TAG, "Network " + i + ": " + networks[i].toString()); Log.i(TAG, "VPN transport is: " + caps.hasTransport(NetworkCapabilities.TRANSPORT_VPN)); Log.i(TAG, "NOT_VPN capability is: " + caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)); } 

Напишите небольшое приложение, которое попадает на внутреннюю страницу или пингует внутренний сайт …

 HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(internal_url); HttpResponse response = client.execute(request); String html = ""; InputStream in = response.getEntity().getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder str = new StringBuilder(); String line = null; while((line = reader.readLine()) != null) { str.append(line); } in.close(); html = str.toString(); 

или

 String str = ""; try { Process process = Runtime.getRuntime().exec( "/system/bin/ping -c 8 " + internal_url); BufferedReader reader = new BufferedReader(new InputStreamReader( process.getInputStream())); int i; char[] buffer = new char[4096]; StringBuffer output = new StringBuffer(); while ((i = reader.read(buffer)) > 0) output.append(buffer, 0, i); reader.close(); str = output.toString(); } catch (IOException e) { e.printStackTrace(); } return str;