我正在尝试注册接收器,它将检查 VPN 状态。我试过这个:在 Android 上获取 VPN 连接状态,但看起来它不再适用于 ICS。我已经检查了 android 源代码以获取一些线索,但没有运气,只注意到在 ISC 中没有类似的东西:vpn.connectivity
和connection_state
- 它曾经在 android 2.3 中。也尝试使用android.net.conn.CONNECTIVITY_CHANGE
as my IntentFilter
,但它根本不会对 VPN 连接做出反应(当然我已经添加了权限android.permission.ACCESS_NETWORK_STATE
)。我认为这很简单,但我已经不知道该怎么做了......有人可以帮我解决这个问题吗?
问问题
4517 次
4 回答
2
可能您可以尝试轮询 DNS 服务器更改。如果它已更改,则 VPN 已连接。但是,我认为这条规则可能有很多例外。
于 2013-05-18T23:30:59.790 回答
0
My solution is polling a NIC list.
# You can get the list by executing command "ls /sys/class/net".
If the list has "tun0", the device already has connected to VPN.
于 2014-09-12T07:09:56.743 回答
0
for (Enumeration<NetworkInterface> en =
NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface intf = en.nextElement();
if (intf.getName().contains("tun0") || intf.getName().contains("ppp0")) {
vpnInterface = intf;
break;
}
}
对于 VPN 网络接口
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 发送消息
于 2016-03-02T07:49:53.160 回答
0
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));
}
于 2016-02-08T16:47:42.540 回答