Как проверить состояние VPN-подключения на Android ICS

Я пытаюсь зарегистрировать получателя, который проверит состояние VPN. Я попробовал это:Получить статус VPN-соединения на Android но похоже, что он больше не работает на ICS. Я проверил исходный код Android для некоторой подсказки, но без удачи, только заметил, что в ISC нет ничего подобного:vpn.connectivity а такжеconnection_state - это использовать, чтобы быть в Android 2.3. Также пытался использоватьandroid.net.conn.CONNECTIVITY_CHANGE Как мойIntentFilter, но он никак не реагирует на VPN-соединение (конечно, я добавил разрешениеandroid.permission.ACCESS_NETWORK_STATE). I thought that it is simple thing to do, but I already run out of ideas how to do it... Could someone help me with this please?

Ответы на вопрос(4)

for (Enumeration<NetworkInterface> en =
             NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
            NetworkInterface intf = en.nextElement();
            if (intf.getName().contains("tun0") || intf.getName().contains("ppp0")) {
                vpnInterface = intf;
                break;
            }
        }

Для интерфейса VPNNetwork

for (Enumeration<InetAddress> en =
                 vpnInterface.getInetAddresses(); en.hasMoreElements(); ) {
                InetAddress address = en.nextElement();
                if (!address.isLoopbackAddress()) {
                    String ip = address.getHostAddress();
                    break;
                }
            }

и InetAddress

Это все, что я знаю сейчас

Чтобы проверить, работает ли он и т. Д., Может быть

if (vpnInterface.isUp())

Я реализовал код, который вызывает себя через некоторое время и отправляю сообщение ApplicationHandlers

Мое решение - опрос списка сетевых карт.
 # Вы можете получить список, выполнив команду "ls / sys / class / net".

Если в списке есть "tun0", устройство уже подключилось к VPN.

Может быть, вы можете попробовать опросить изменения DNS-сервера. Если он изменился, VPN подключился. Тем не менее, я думаю, что может быть много исключений из этого правила.

Как вы получаете текущие DNS-серверы для Android?

NetworkCapabilities у меня работал в API 21+. К сожалению, я не нашел решения для 19-20. Вы должны перебрать все существующие сети и проверить, какие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));

}

Ваш ответ на вопрос