如何检查在Android ICS VPN连接的状态(How to check VPN connect

2019-07-29 16:10发布

我想注册接收器,将检查VPN状态。 我曾尝试这样的: 获取Android上的VPN连接的状态 ,但看起来像它不再适用于ICS。 我已经检查Android源代码的一些线索,但没有运气,只有注意到,在ISC有没有像: vpn.connectivityconnection_state -用它来在Android 2.3的。 也尝试过使用android.net.conn.CONNECTIVITY_CHANGE作为我IntentFilter ,但它并没有不惜一切(当然我已经添加允许VPN连接反应android.permission.ACCESS_NETWORK_STATE )。 我认为这是简单的事,但我已经江郎才尽了怎么办呢?可能有人帮助我吗?

Answer 1:

可能是你可以尝试轮询DNS服务器的变化。 如果已经改变,那么VPN连接了。 不过,我觉得可能有很多例外的这一规则。

你如何为Android当前的DNS服务器?



Answer 2:

我的解决办法是轮询网卡列表。
#你可以通过执行命令“LS / SYS /班/网”获取列表。

如果列表中的“TUN0”,设备已经有连接到VPN。



Answer 3:

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));

}


Answer 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())

我已经实现了其中serveral的时间后,自称是一个代码,并发送一条消息给ApplicationHandlers



文章来源: How to check VPN connection status on Android ICS